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 互质(欧拉函数)的主要内容,如果未能解决你的问题,请参考以下文章

[题解](gcd/欧拉函数)luogu_P2568_GCD

luogu_2158 [SDOI2008]仪仗队

欧拉函数及代码实现

欧拉函数

Relatives POJ - 2407 欧拉函数

Relatives POJ - 2407 欧拉函数