代码改变世界

pku773_Happy 2006

2011-05-23 06:14  Min·zc  阅读(178)  评论(0编辑  收藏  举报

详细报告移步这里

http://blog.csdn.net/shiren_Bod/archive/2010/07/17/5741029.aspx 


#include <iostream>

 2 #include <memory.h>
 3 using namespace std;
 4 int s[1000001];
 5 int prime[80000];
 6 void Prime()
 7 {
 8         memset(s,0,sizeof(s));
 9         memset(prime,0,sizeof(prime));
10         for(int i=2;i<=1000000;i++)
11                 if(s[i]==0)
12                         for(int j=2;j*i<=1000000;j++)
13                                 s[j*i]=1;
14         prime[0]=1;
15         for(int i=2;i<=1000000;i++)
16                 if(s[i]==0)
17                         prime[prime[0]++]=i;
18 }
19 int eular(int n)
20 {
21         int ret=1;
22         for(int i=1;i<prime[0]&&prime[i]*prime[i]<=n;i++)
23                 if(n%prime[i]==0)
24                 {
25                         ret*=(prime[i]-1);
26                         n/=prime[i];
27                         while(n%prime[i]==0)
28                         {
29                                 n/=prime[i];
30                                 ret*=prime[i];
31                         }
32                 }
33         if(n>1)
34                 ret*=(n-1);
35         return ret;
36 }
37 int gcd(int a,int b)
38 {
39         if(!b)
40                 return a;
41         else
42                 return gcd(b,a%b);
43 }
44 int main()
45 {
46         Prime();
47         int n,m;
48         while(cin>>n>>m)
49         {
50                 int len=eular(n);
51         //     cout<<len<<endl;
52         //     cout<<"asd"<<endl;
53                 int ps=m>len?m%len:m;
54                 if(ps==0)
55                         ps=len;
56         //     cout<<ps<<endl;
57                 int i;
58                 if(m<len)
59                         i=1;
60                 else if(m%len==0)
61                         i=(m/len-1)*n+1;
62                 else
63                         i=m/len*n+1;
64         //     cout<<i<<endl;
65                 for(;ps!=0;i++)
66                         if(gcd(i,n)==1)
67                         {
68                                 ps--;   
69                                 if(ps==0)
70                                         break;
71                         }
72                 cout<<i<<endl;
73         }
74 }