poj 2773 Happy 2006

这是一个找规律的题;

例如: 12互质的数有 1 5 7 11 (12)13 17 19 22 (24) 25

我们可以看到一个循环节;

View Code
#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;

}

 

你可能感兴趣的:(APP)