1.题目描述:点击打开链接
2.解题思路:本题实质上是要求满足1≤x,y≤n,且x,y互素的个数。除了(1,1)外,其余的x,y各不相同。设x<y有f(n)个,那么最终答案是2*f(n)+1。关于f(n)的计算就是不超过n的所有数的欧拉函数的和。而求解1~n中所有数的欧拉函数的时间复杂度是O(N*loglogN)。
3.代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string> #include<sstream> #include<set> #include<vector> #include<stack> #include<map> #include<queue> #include<deque> #include<cstdlib> #include<cstdio> #include<cstring> #include<cmath> #include<ctime> #include<functional> using namespace std; #define N 50000+10 int phi[N]; void phi_table(int n, int*phi) { memset(phi, 0, sizeof(phi)); phi[1] = 1; for (int i = 2; i <= n;i++) if (!phi[i]) for (int j = i; j <= n; j += i) { if (!phi[j])phi[j] = j; phi[j] = phi[j] / i*(i - 1); } } int main() { //freopen("test.txt", "r", stdin); phi_table(N,phi);//事先求出所有数的phi值 int n; while (scanf("%d",&n)!=EOF&&n) { int ans = 0; for (int i = 2; i <= n; i++) ans += phi[i]; ans = ans * 2 + 1; printf("%d\n", ans); } return 0; }
时间: 2024-10-14 04:13:42