您的位置:首页 > 其它

快速求欧拉函数 poj2478

2017-01-17 15:56 211 查看
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
#define MAXN 1000090
using namespace std;
int su[MAXN / 6], tot;
long long f[MAXN], sum[MAXN];

int main() {
tot = 0;
for (int i = 1; i <= MAXN; i++)
f[i] = i;
for (int i = 2; i <= MAXN; i++)
if (f[i] == i)
for (int j = i; j <= MAXN; j += i)
f[j] = f[j] / i * (i - 1);
sum[1] = 0;
for (int i = 2; i <= MAXN; i++)
sum[i] = sum[i - 1] + f[i];
int n;
while (scanf("%d", &n) != EOF)
{
if (0 == n)
break;
printf("%lld\n", sum
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数论 欧拉函数 模板