RT,双倍经验过了,但是交到这里就T了,上spoj上看了一下,不是爬虫问题。求帮忙看一下。
#include <bits/stdc++.h>
#define int long long
#define debug puts("IAKIOI")
#define endl '\n'
#define inf 1e18
using namespace std;
int pm[100010],phi[1000010],tot;
bool vis[1000010];
int f[1000010];
void init()
{
phi[1]=1;
for ( int i = 2 ; i <= 1000000 ; i++ )
{
if(!vis[i])
{
phi[i]=i-1;
pm[++tot]=i;
}
for ( int j = 1 ; j <= tot ; j++ )
{
if(pm[j]*i>1000000)
{
break;
}
vis[pm[j]*i]=1;
if(i%pm[j]==0)
{
phi[pm[j]*i]=phi[i]*pm[j];
break;
}
phi[pm[j]*i]=phi[i]*phi[pm[j]];
}
}
for ( int i = 1 ; i <= 1000000 ; i++ )
{
f[i]++;
}
for ( int i = 2 ; i <= 1000000 ; i++ )
{
for ( int j = i ; j <= 1000000 ; j+=i )
{
f[j]+=phi[i]*i/2;
}
}
}
signed main()
{
init();
int T;
cin >> T;
while(T--)
{
int n;
cin >> n;
cout << f[n]*n << endl;
}
return 0;
}