码迷,mamicode.com
首页 > 其他好文 > 详细

luogu P1592 互质(欧拉函数)

时间:2018-09-01 12:34:40      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:mat   cstring   scanf   分享   algorithm   width   code   cst   ace   

题意

技术分享图片

(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 互质(欧拉函数)

标签:mat   cstring   scanf   分享   algorithm   width   code   cst   ace   

原文地址:https://www.cnblogs.com/Xu-daxia/p/9569221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!