bzoj4173(欧拉函数)

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 22:10   98   0


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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP