这题被我做得好搓 做完看别人做的才发现这么简单 遍历就可以的事被为整的有拆分素因子再 排列相乘
哎 真不想说什么自己水的不能再水了
#include <iostream> #include<cstdio> #include<cstring> using namespace std; int getsumfactor(int x) { int ans=0; for(int i=1;i<=x/2;i++) if(x%i==0) ans+=i; return ans; } int getlen(int x) { int m=1,ans=0; while(m<=x) m*=10,ans++; return ans; } int main() { int a[105][3],n,s=0,len=0; while(cin>>n&&n!=0) a[s++][0]=n; for(int i=0; i<s; i++) { a[i][1]=getsumfactor(a[i][0]); a[i][2]=getlen(a[i][0]); len=max(len,a[i][2]); } cout<<"PERFECTION OUTPUT"<<endl; for(int i=0; i<s; i++) { for(int j=0; j<len-a[i][2]; j++) cout<<" "; cout<<a[i][0]<<" "; if(a[i][0]>a[i][1]) cout<<"DEFICIENT"<<endl; if(a[i][0]==a[i][1]) cout<<"PERFECT"<<endl; if(a[i][0]<a[i][1]) cout<<"ABUNDANT"<<endl; } cout<<"END OF OUTPUT"<<endl; return 0; }
下面是我之前A的 靠 我真想杀了我自己
#include <iostream> #include<cstdio> #include<cstring> using namespace std; #define max1 60000 bool isprime[max1]; int prime[max1],nprime; void getprime() { nprime=0; long long i,j; memset(isprime,1,sizeof(isprime)); isprime[1]=0; for(i=2; i<max1; i++) if(isprime[i]) { prime[++nprime]=i; for(j=i*i; j<max1; j+=i) isprime[j]=0; } } bool dp[60010][2]; int getsumfactor(int x) { memset(dp,0,sizeof(dp)); dp[1][0]=1; int temp=x,g1=1,g2=0; for(int i=1; prime[i]<=x&&temp>1; i++) { while(temp%prime[i]==0) { g1=!g1,g2=!g2; for(int j=1; j<x; j++) if(dp[j][g1]) dp[j][g2]=1,dp[j*prime[i]][g2]=1; temp/=prime[i]; for(int j=0; j<x; j++) dp[j][g1]=0; } } int ans=0; for(int i=1; i<x; i++) if(dp[i][g2]) ans+=i; return ans; } int getlen(int x) { int m=1,ans=0; while(m<=x) m*=10,ans++; return ans; } int main() { getprime(); int a[105][3],n,s=0,len=0; while(cin>>n&&n!=0) a[s++][0]=n; for(int i=0; i<s; i++) { a[i][1]=getsumfactor(a[i][0]); a[i][2]=getlen(a[i][0]); len=max(len,a[i][2]); } cout<<"PERFECTION OUTPUT"<<endl; for(int i=0; i<s; i++) { for(int j=0; j<len-a[i][2]; j++) cout<<" "; cout<<a[i][0]<<" "; if(a[i][0]>a[i][1]) cout<<"DEFICIENT"<<endl; if(a[i][0]==a[i][1]) cout<<"PERFECT"<<endl; if(a[i][0]<a[i][1]) cout<<"ABUNDANT"<<endl; } cout<<"END OF OUTPUT"<<endl; return 0; }
时间: 2024-11-16 12:11:13