就欧拉函数然后地推一下。
#include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cctype> #include <cstdio> #include <string> #include <vector> #include <climits> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #define LL long long #define PI 3.1415926535897932626 using namespace std; int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);} int phi[1010]; int ans[1010]; void calcu() { memset(phi,0,sizeof(phi)); phi[1] = 1; for (int i = 2; i <= 1000; i++) if (!phi[i]) for (int j = i; j <= 1000; j += i) { if (!phi[j]) phi[j] = j; phi[j] = phi[j] / i * (i - 1); } ans[1] = 3; ans[2] = 5; for (int i = 3; i <= 1000; i++) ans[i] = ans[i - 1] + phi[i] * 2; } int main() { int kase = 1; int T; calcu(); scanf("%d",&T); while (T--) { int n; scanf("%d",&n); printf("%d %d %d\n",kase++,n,ans[n]); } return 0; }
时间: 2024-10-15 23:37:10