感觉一到数学题,自己就像废了一样。。
#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;
}