欧拉函数。
注意除了(1,1)之外的(x,y)都算两个。
#include <iostream>
#include <cstring>
using namespace std;
const int MAX_N = 50001 + 10;
int phi[MAX_N];
void solve()
{
memset(phi,0,sizeof(phi));
phi[1] = 1;
for(int i = 2; i <= MAX_N; i++)
{
if(!phi[i])
{
for(int j = i; j <= MAX_N; j += i)
{
if(!phi[j])
phi[j] = j;
phi[j] = phi[j] / i * (i - 1);//*phi[j]保存不超过j且与j互质的正整数的个数*/
}
}
}
}
int main()
{
int n;
solve();
for(int i = 2; i < MAX_N; i++)
phi[i] = phi[i] + phi[i-1];
while(cin >> n, n)
cout << phi[n] * 2 - 1 << endl;
return 0;
}
本文提供了一种使用欧拉函数解决UVa10820-SendaTable问题的方法。通过预处理计算所有小于等于50000的数的欧拉函数值,并针对每个询问输出特定格式的答案。
623

被折叠的 条评论
为什么被折叠?



