求问T原因,悬关
查看原帖
求问T原因,悬关
530468
_determination_楼主2023/12/15 19:21

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;
}
2023/12/15 19:21
加载中...