10pts,#2~9全WA求调!(悬关)
  • 板块P2568 GCD
  • 楼主rainygame
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/3/31 18:14
  • 上次更新2023/10/23 19:56:58
查看原帖
10pts,#2~9全WA求调!(悬关)
804607
rainygame楼主2023/3/31 18:14

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7+5;

int n;
int phi[maxn];
vector<int> prime;
bool vis[maxn];   
long long ans; 
long long sum[maxn];

void oula(){   
	phi[1]=1;
    for(int i=2; i<=n; i++){
        if (!vis[i]){
        	prime.push_back(i);
			phi[i] = i-1;
		}
		for (int j: prime){
			if (i*j <= n){
				vis[i*j] = true;
            	phi[i*j] = phi[i]*j;
            	if (i % j == 0) break;
			}else{
				break;
			}
		}
    }
}
int main(){
    cin >> n;
    oula();
    
    for (int i=1; i<=n; i++) sum[i] = sum[i-1] + phi[i];
//    for (int i=1; i<=n; i++) cout << phi[i] << ' ';
//    cout << '\n';
//    for (int i: prime) cout << i << ' ';
//    cout << '\n';
//    for (int i=1; i<=n; i++) cout << vis[i] << ' ';
//    cout << '\n';
    for (int i: prime) ans += (sum[n/i]<<1)-1;
    cout << ans;
    
    return 0;
}
2023/3/31 18:14
加载中...