您的位置:首页 > 其它

bzoj4173(欧拉函数)

2016-08-24 15:35 183 查看


数据大:10^15次方

公式复杂:不知道怎么化简

然后,感觉满足打表找规律,发现sigema phi【k】 k属于s(n,m)==n*m。。。。。。。。。。。。

再求两个phi就好,注意在括号里面mod之后,需要在括号外面再mod一次,否则会wa。。。

标准证明:



#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<bitset>
using namespace std;
typedef long long ll;
const ll mod=998244353;
ll phi(ll n)
{
ll ans=n,sq=(ll)sqrt(n);
for (int i=2;i<=sq;i++)
if (n%i==0)
{
ans=ans/i*(i-1);
while (n%i==0) n=n/i;
}
if (n>1) ans=ans/n*(n-1);
return ans%mod;
}

ll n,m;
int main()
{
int x;
scanf("%lld%lld",&n,&m);
ll ans=phi(n)*phi(m)%mod*(n%mod)%mod*(m%mod)%mod;//这里mod要强烈注意,里面mod,外面也要mod!!!!!
printf("%lld",ans);
return 0;
}

总结

1:很多的问题,通过小范围数据打表,是非常便于帮助分析题目的性质的,有的时候还可以发现潜在的规律。

2:mod的情况需要特别注意,很多情况在括号里面mod之后,外面也要mod
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: