题目大意
我也说不清。
解题思路
把题目模型转化为求gcd(a,b)=1的对数。
这个题目较简单,求出前2~n的欧拉函数并计算前缀和,然后特别加个3就好
Code
#include <iostream>
using namespace std;
int totalprime;
int prime[1000], v[1000], phi[1000], sum[1000];
void getprime(int n)
{
for (int i = 2; i < n; i++)
{
if (!v[i])
{
prime[totalprime++] = i;
phi[i] = i - 1;
}
for (int j = 0; j < totalprime && i * prime[j] < n; j++)
{
v[i * prime[j]] = 1;
if (i % prime[j] == 0)
{
phi[i * prime[j]] = phi[i] * prime[j];
break;
}
else
{
phi[i * prime[j]] = phi[i] * (prime[j] - 1);
}
}
}
for (int i = 2; i < n; i++) sum[i] = sum[i - 1] + phi[i];
}
int main()
{
ios::sync_with_stdio(false);
getprime(1001);
int t;
cin >> t;
for (int k = 1; k <= t; k++)
{
int n;
cin >> n;
cout << k << ' ' << n << ' ' << 2 * sum[n] + 3 << endl;
}
}