40分6个点RE!!
  • 板块P2568 GCD
  • 楼主_YQY
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/1/13 16:15
  • 上次更新2023/10/24 04:25:39
查看原帖
40分6个点RE!!
638274
_YQY楼主2023/1/13 16:15
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7+5;
bool vis[maxn];  
int prime[maxn],cnt=0,n,phi[maxn];    
long long sum[maxn];
void oulashai(int n) 
{	phi[1]=1;
    for(int i=2;i<=n;i++)
    {
        if(vis[i]==0) prime[++cnt]=i,phi[i]=i-1;
        for(int j=1;j<=cnt&&i*prime[i]<=n;j++)
        {
        	vis[i*prime[j]]=1;
            if(i%prime[j]==0) {
				phi[i*prime[j]]=phi[i]*prime[j];
				break;
			} else {
				phi[i*prime[j]]=phi[i]*phi[prime[j]];
			}
        }
    }
}
int main(){
	long long ans=0;
	cin>>n;
	oulashai(n);
	for(int i=1;i<=n;i++) sum[i]=sum[i-1]+phi[i];
	for(int i=1;i<=cnt;i++){
		ans+=2*sum[n/prime[i]]-1;
	}
	cout<<ans<<endl;
}
2023/1/13 16:15
加载中...