luogu P1592 互质(欧拉函数)
Posted xu-daxia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1592 互质(欧拉函数)相关的知识,希望对你有一定的参考价值。
题意
(n<=106,k<=108)
题解
一开始以为是搜索。
但想想不对,翻了一眼题解发现是欧拉函数。
因为
gcd(a,b)=gcd(a,a+b)
所以和n互质的数应该是类似a1,a2.....ax,a1+n,a2+n.....ax+n......这样的。
所以就可以瞎搞了。
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 int n,d,phi,c[1500000],tmp,ans,cnt; 8 int gcd(int x,int y){ 9 if(x==0)return y; 10 if(y==0)return x; 11 return gcd(y,x%y); 12 } 13 void get_phi(){ 14 for(int i=1;i<=n;i++){ 15 if(gcd(i,n)==1){ 16 phi++; 17 c[++cnt]=i; 18 } 19 } 20 } 21 int main(){ 22 scanf("%d%d",&n,&d); 23 get_phi(); 24 tmp=(d-1)/phi; 25 ans=(d-1)%phi+1; 26 printf("%d",c[ans]+tmp*n); 27 return 0; 28 }
以上是关于luogu P1592 互质(欧拉函数)的主要内容,如果未能解决你的问题,请参考以下文章