POJ1528 数论

来源:互联网 发布:ise14.7 端口 编辑:程序博客网 时间:2024/05/17 09:18

这题被我做得好搓 做完看别人做的才发现这么简单 遍历就可以的事被为整的有拆分素因子再 排列相乘

哎 真不想说什么自己水的不能再水了

#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 60000bool 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;}

 

 

原创粉丝点击