题目链接 http://acm.uestc.edu.cn/#/problem/show/1425
http://acm.uestc.edu.cn/images/assets/1425.pdf
思路:欧拉函数打表
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int su[110000], sum[110000];
int get(int n)
{
int res = n;
int a = n;
for (int i = 2; i * i <= n; i++)
{
if(a % i == 0)
{
res = res / i * (i - 1);
while(a % i == 0)
{
a = a / i;
}
}
}
if(a > 1)
{
res = res / a * (a - 1);
}
return res;
}
void solve()
{
sum[0] = 0;
sum[1] = 1;
for(int i = 2; i <=10000; i++)
{
sum[i] = sum[i-1] + get(i);
}
}
int main()
{
int p, k, n;
scanf("%d", &p);
memset(sum, 0, sizeof(sum));
solve();
while(p--)
{
scanf("%d %d", &k, &n);
printf("%d %d\n", k, sum[n] + 1);
}
return 0;
}