#include<iostream>
#include<cmath>
using namespace std;
#define maxn 10000
int prime[maxn + 5] = {0};
int f[maxn + 5] = {0};
long long cnt[maxn + 5] = {0};
void init(){
for(int i = 2; i <= maxn; i++){
if(!prime[i]){
prime[++prime[0]] = i;
f[i] = i + 1;
cnt[i] = i * i;
}
for(int j =1; j <= prime[0]; j++){
if(prime[j] * i > maxn) break;
prime[i * prime[j]] = 1;
if(i % prime[j] == 0){
f[i * prime[j]] = f[i] * (cnt[i] * prime[j] - 1) / (cnt[i] - 1);
cnt[i * prime[j]] = cnt[i] * prime[j];
break;
}else{
f[i * prime[j]] = f[i] * f[prime[j]];
cnt[i * prime[j]] = prime[j] * prime[j];
}
}
}
return ;
}
int main(){
long long sum = 0;
init();
for(int i = 2; i < maxn; i++){
f[i] -= i;
}
for(int i =2; i < maxn ; i++){
if(f[i] != i && f[i] < maxn && i == f[f[i]]) sum += i;
}
cout << sum << endl;
return 0;
}
整数N的约数和(不包括本身
最新推荐文章于 2024-01-21 14:14:35 发布