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;
}

 

posted @ 2012-07-14 19:44  wutaoKeen  阅读(165)  评论(0编辑  收藏  举报