|

数据大: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
|