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

 

 

时间: 2024-09-10 12:51:01

POJ1528 数论的相关文章

可用于数论计算的无符号大整数类

前些日子,无意中访问到三思科学网,里面介绍了许多数论问题,这也是我儿时的爱好,于是就利用空闲时间编写了一个用于数论计算的无符号大整数类. 一.类的基本结构Class CUSuperInt { public: //构造及析构函数 CUSuperInt(); CUSuperInt(DWORD dwValue); CUSuperInt(char* pszVal); CUSuperInt(CUSuperInt& x); virtual ~CUSuperInt(); protected: DWORD *p

HDU 1406 完数 (数论)

完数 http://acm.hdu.edu.cn/showproblem.php?pid=1406 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description 完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3:28=1+2+4+7+14. 本题的任务是判断两个正整数之间完数的个数. Inp

UVa 11526 H(n) (数论)

11526 - H(n) Time limit: 5.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=2521 What is the value this simple C++ function will return? long long H(int n){      long lo

UVa 160 Factors and Factorials:数论

160 - Factors and Factorials Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=96 题目点这:http://uva.onlinejudge.org/external/1/160.pdf 思路:遍历1~n计算质因子个数即可. 你若还想再快点的话,就用[n/p]+[n

UVa 524 Prime Ring Problem:数论&amp;amp;DFS

524 - Prime Ring Problem Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=465 A ring is composed of n (even number) circles as shown in diagram. Put natural numbers into e

UVa 136 Ugly Numbers (数论)

136 - Ugly Numbers Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=72 Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2,

HDU 2281 Square Number: Pell方程及数论

http://acm.hdu.edu.cn/showproblem.php?pid=2281 思路: 原式化为:m^2-48x^2=1,(m=4n+3) 立即得到最小正整数解:m1=7,x1=1 后面就和uva 138一样了. 注意:得到mk后还要判断(mk-3)%4==0才能加到n中,详见代码. 完整代码: 01./*31ms,276KB*/ 02. 03.#include<cstdio> 04.#include<vector> 05.using namespace std; 0

UVa 11889 Benefit (数论)

11889 - Benefit Time limit: 5.000 seconds http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&category=467&page=show_problem&problem=29 89 Recently Yaghoub is playing a new trick to sell some more. When somebody gives him

UVa 10791 Minimum Sum LCM (数论&amp;amp;素因子分解)

10791 - Minimum Sum LCM Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&category=467&page=show_problem&problem=17 32 LCM (Least Common Multiple) of a set of integers is defined as the minimum