poj 2773 Happy 2006
这是一个找规律的题;
例如: 12互质的数有 1 5 7 11 (12)13 17 19 22 (24) 25
我们可以看到一个循环节;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<queue> #include<set> #include<map> #include<cstring> #include<vector> using namespace std; int num[1000024]; int Gcd( int a , int b ) { return b == 0 ? a : Gcd( b , a%b ); } int main( ) { int n,k; while( scanf( "%d %d",&n,&k )==2 ) { int cnt = 0; for( int i = 1 ;i <= n ; i ++ ) { if( Gcd( i , n ) == 1 ) { num[++cnt] = i; } } if( cnt >= k ) printf( "%d\n",num[k] ); else { long long t = (k - 1)/ cnt ; int tt = k % cnt ; if( tt==0 ) tt = cnt; printf( "%lld\n",t*n + num[tt] ); } } //system( "pause" ); return 0; }