自己写了一个完全数的程序
#include<iostream> #include<cmath> using namespace std; long long n; int prime[100],pNum; int fx[100],fnum[100]; int cnt; bool isPrime(int n) { if(n<=1) return false; int sqr=(int)sqrt(n*1.0); for(int i=2;i<=sqr;i++) if(n%i==0) return false; return true; } int main() { cin>>n; long long s=1; //生成一个素数数组 for(int i=2;s<n;i++) { if(isPrime(i)) prime[pNum++]=i,s*=i; } //cout<<pNum<<endl; for(int i=2;i<=n;i++)//枚举1-n { int num=0; int nn = i; //保存n的值 int sqr = (int)sqrt(nn*1.0); for(int j=0;j<pNum && prime[j]<=sqr;j++) { if(nn%prime[j]==0) { fx[num]=prime[j]; fnum[num]=0; while(nn%prime[j]==0) { fnum[num]++; nn/=prime[j]; } num++; } } if(nn!=1) { fx[num]=nn; fnum[num]=1; num++; } s = 1; long long sum,temp; for(int j=0;j<num;j++) { sum = 0,temp = 1; for(int k=0;k<=fnum[j];k++) { sum+=temp; temp*=fx[j]; } s*=sum; } /* cout <<"test n = "<< i << " " << " s = "<< s << endl; for(int j=0;j<num;j++) cout << fx[j] << " "; cout << endl; for(int j=0;j<num;j++) cout << fnum[j]<<" "; cout << endl; */ if(s-i==i) cnt++; } cout << cnt; return 0; }