题目描述
输入输出格式
输入格式:
输出格式:
输入输出样例
输入样例#1:
10 100 200000 0
输出样例#1:
67 13015 143295493160
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long LL;
const int maxn=4000000;
LL a[maxn],b[maxn],phi[maxn];
int n;
inline int read() {
char c;
int ans=0;
int f=1;
c=getchar();
while(c<'0'||c>'9') {
if(c=='-')
f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
ans=ans*10+c-'0';
c=getchar();
}
return ans*f;
}
bool isPrime[maxn+1];
void oula()
{
for(int i=1;i<=maxn;i++) phi[i]=i;
memset(isPrime,true,sizeof(isPrime));
isPrime[0]=isPrime[1]=false;
phi[1]=1;
for(int i=2;i<=maxn;i++)
{
if(isPrime[i])
{
for(int j=i;j<=maxn;j+=i)
{
isPrime[j]=false;
phi[j] -= phi[j]/i;
}
}
}
}
int main() {
oula();
for(int i=1;i<=maxn;i++)
{
for(int j=i*2;j<=maxn;j+=i)
{
b[j]+=i*phi[j/i];
}
}
a[2]=b[2];
for(int i=3;i<=maxn;i++)
{
a[i]=a[i-1]+b[i];
}
while(1)
{
n=read();
if(n==0)
return 0;
else
{
cout<<a[n]<<endl;
}
}
}