阅读641 返回首页    go 技术社区[云栖]


POJ1528 数论

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

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

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

 

 

最后更新:2017-04-04 07:03:27

  上一篇:go POJ 3219 二项式系数奇偶性的判定
  下一篇:go 关于12306订票系统相关的文档收集整理