poj 2773
要求求的是第K个,开始一直迷惑以为是小于n的数中的。。竟然继续往后数。。
这样的话互质数是循环出现的,每次k个,k即为小于n的互质数的个数,即这k个数不断加n,还与n互质。
//============================================================================ // Name : 1284.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; int a[1000010]; int n, num, k, t; int gcd(int x, int y){ int r; if(x < y){ swap(x, y); } while(x%y){ r = x%y; x = y; y = r; } return y; } int main(){ freopen("a.txt", "r", stdin); while(scanf("%d%d", &n, &k)!=EOF){ num = 0; for(int i = 1;i <= n;i++){ if(gcd(n, i) == 1){ a[++num] = i; } } // printf("n:%d %d\n", n, k); t = k%num; if(t == 0) t = num; // printf("t:%d\n", t); // printf("a[t]:%d\n", a[t]); printf("%d\n", a[t]+((k-1)/num)*n); } return 0; }