简单的欧几里得函数应用。
f(x,y) = f(y,x%y);
f(x,y) = f(y*t+x,y) t为非负整数;
其时这道题还有好多优化,Discuss里面好多大神都弄到了0ms。。。Orz
我只水过去了。。。。
G++ 2400++,用C++ TLE....
特别的注意 1 的情况 RE了好多次
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 long long int rp[1000010]; 7 8 long long int gcd(long long int a,long long int b) 9 { 10 return b == 0 ? a : gcd(b,a%b) ; 11 } 12 13 int main() 14 { 15 long long int top,n,k,i; 16 17 while(cin>>n>>k) 18 { 19 for(i = 1,top = 0;i <= n && top < k; i++) 20 { 21 if(gcd(n,i) == 1) 22 { 23 rp[top++] = i; 24 } 25 } 26 27 if(k%top == 0) 28 { 29 printf("%lld\n",(k/top-1)*n + rp[top-1]); 30 } 31 else 32 { 33 printf("%lld\n",k/top*n + rp[k%top-1]); 34 } 35 36 } 37 38 return 0; 39 }