http://poj.org/problem?id=2478
题意:定义一个序列Fn是不可约有理数a / b的集合,(n>=b>a>0且gcd(a,b)=1)。
思路:Fn为2到n欧拉函数的值的总和。
#include <iostream>
#include <stdio.h>
#include <string.h>
#define maxn 1000005
#define ll long long
using namespace std;
int phi[maxn]={0};///欧拉函数的值
void init()///筛法求欧拉函数
{
for(int i=1;i<maxn;i++)phi[i]=i;
for(int i=2;i<maxn;i+=2)phi[i]/=2;
for(int i=3;i<maxn;i+=2)
{
if(phi[i]==i)
for(int j=i;j<maxn;j+=i)
phi[j]=phi[j]/i*(i-1);
}
}
int main()
{
int n;
init();
while(cin>>n&&n)
{
ll ans=0;
for(int i=2;i<=n;i++)
ans+=phi[i];
cout<<ans<<endl;
}
}
本文介绍了一种基于筛法求解欧拉函数值的方法,并通过累加这些值来解决特定数学序列问题。该序列涉及不可约有理数对,核心在于计算从2到给定整数n范围内所有数的欧拉函数值之和。
3万+

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



