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

 

 

目录
相关文章
|
4月前
Pseudoprime numbers(POJ-3641 快速幂)
Pseudoprime numbers(POJ-3641 快速幂)
|
11月前
poj 1185 炮兵阵地 (状态压缩dp)
如果你是刚刚开始做状态压缩dp,我建议你先看看 poj 3254 Corn Fields 这是一道比这一题更简单,更容易入门的题目。 还有在代码中我用了一个很巧妙的方法求一个数二进制数中1的个数 具体请看我博客中 x& (x - 1)==0 这篇文章 链接 。
36 1
HDU7018.Banzhuan(计算几何+贪心)
HDU7018.Banzhuan(计算几何+贪心)
97 0
HDU7018.Banzhuan(计算几何+贪心)
|
网络架构
POJ-1005,I Think I Need a Houseboat(数学题)
POJ-1005,I Think I Need a Houseboat(数学题)
POJ-3641,Pseudoprime numbers(快速幂)
POJ-3641,Pseudoprime numbers(快速幂)
|
算法
POJ 3154 Graveyard【多解,数论,贪心】
Graveyard Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1707   Accepted: 860   Special Judge Description Prog...
1241 0
|
机器学习/深度学习
【OJ】贪心法 Saruman's Army POJ 3069 /acmclub 12132
题目链接:点击打开链接 /* 6 10 贪心法Saruman's Army POJ 3069 1 7 15 20 30 50 ans=3 */ #include #include using namespace std; int x[1010]; ...
879 0