POJ2478 && Sicily1089(欧拉函数)

一直Runtime Error,最后把phi和f的声明放到main函数外面就行了,不懂。。

#include <iostream>
#include <cstdio>
using namespace std;

int phi[1000010];
long long  f[1000010];

int main()
{
    int i,j;
    for (i=1;i<=1000010;i++)
        phi[i]=i;
    for (i=2;i<=1000010;i+=2)
        phi[i]/=2;
    for (i=3;i<=1000010;i+=2)
        if (phi[i]==i)
            for (j=i;j<=1000010;j+=i)
                phi[j]=phi[j]/i*(i-1);
    f[1]=0;

    for (i=2;i<=1000010;i++)
        f[i]=f[i-1]+phi[i];
    while (1)
    {
        int n;
        scanf("%d",&n);
        if (!n)
            break;
        printf("%lld\n",f[n]);
    }
    return 0;
}     


你可能感兴趣的:(POJ2478 && Sicily1089(欧拉函数))