2018牛客多校第三场H

感觉一到数学题,自己就像废了一样。。

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N = 10001000;

int prime[N];
bool is_prime[N];

void get_prime(){
	memset(is_prime, true, sizeof(is_prime));
	int cnt = 1;
	for(int i = 2; i <= N; i ++){
		if(is_prime[i]){
			prime[cnt ++] = i;
			for(int j = i; j <= N; j += i)
				is_prime[j] = false;
		}
	}
}

int main(){
	int n;
	cin >> n;
	get_prime();

	int num;
	for(num = 1; num <= n; num ++){
		if(prime[num] > n)
			break;
	}
	num --;
//	cout << num << endl;
	
	ll ans = 0;
	for(int i = 1; i <= num; i ++){
		ans += (n / prime[i]) * (i - 1);   //假设prime[i]为较大的素数,n / prime[i]代表gcd的可能情况,(i - 1)代表另一个素数可能的取值数目 
	}
	cout << ans * 2 << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38759433/article/details/81506889
今日推荐