UVa 382 Perfection (过剩数、完美数和亏数)

382 - Perfection

Time limit: 3.000 seconds

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=5&page=show_problem&problem=318

From the article Number Theory in the 1994 Microsoft Encarta: ``If a,b, c are integers such that a = bc, a is called a multiple ofb or of c, and b or c is called a divisor or factor ofa. If c is not

,b is called a proper divisor of a. Even integers, which include 0, are multiples of 2, for example, -4, 0, 2, 10; an odd integer is an integer that is not even, for example, -5, 1, 3, 9. A perfect number is a positive integer that is equal to the sum of all its positive, proper divisors; for example, 6, which equals 1 + 2 + 3, and 28, which equals 1 + 2 + 4 + 7 + 14, are perfect numbers. A positive number that is not perfect is imperfect and is deficient or abundant according to whether the sum of its positive, proper divisors is smaller or larger than the number itself. Thus, 9, with proper divisors 1, 3, is deficient; 12, with proper divisors 1, 2, 3, 4, 6, is abundant."

Problem Statement

Given a number, determine if it is perfect, abundant, or deficient.

Input

A list of N positive integers (none greater than 60,000), with 1 < N < 100. A 0 will mark the end of the list.

Output

The first line of output should read PERFECTION OUTPUT. The next N lines of output should list for each input integer whether it is perfect, deficient, or abundant, as shown in the example below. Format counts: the echoed integers should be right justified within the first 5 spaces of the output line, followed by two blank spaces, followed by the description of the integer. The final line of output should readEND OF OUTPUT.

Sample Input

15 28 6 56 60000 22 496 0

Sample Output

PERFECTION OUTPUT
   15  DEFICIENT
   28  PERFECT
    6  PERFECT
   56  ABUNDANT
60000  ABUNDANT
   22  DEFICIENT
  496  PERFECT
END OF OUTPUT

完整代码,O(√n)复杂度:

/*0.019s*/

#include<cstdio>
#include<cmath>

int main()
{
    int n,m,i, sum;
    puts("PERFECTION OUTPUT");
    while (scanf("%d", &n), n)
    {
        m = (int)sqrt(n), sum = 1;
        for (i = 2; i <= m ; ++i)
            if (n % i == 0) sum += i + n / i;
        if (m * m == n) sum -= m;
        printf("%5d  ", n);
        if (sum < n) puts("DEFICIENT");
        else if (sum > n) puts("ABUNDANT");
        else puts("PERFECT");
    }
    puts("END OF OUTPUT");
}

作者:csdn博客 synapse7

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索integer
, output
, is
, of
, 完美数
The
perfection、swiss perfection、vital perfection、skin perfection、epson perfection v19,以便于您获取更多的相关知识。

时间: 2025-01-02 01:59:26

UVa 382 Perfection (过剩数、完美数和亏数)的相关文章

Shell或命令行计算数组或文件的行数和列数

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1630920 (一)闲聊Linux Shell 编程 都说中国文化博大精深(例如汉字),但作为操作系统中的佼佼者,Linux虽然时间并不长,但同样也是博大精深.谁也不敢说自己已经熟练的掌握了Linux中所有的内容,除了知识点众多以外,快速的发展和更新使得Linux越来越强大,也使得Linux在短时间内越来越难掌握.所

A*算法实现8数或者15数问题(C#实现)

算法|问题 -.问题描述 8数或15数问题是同一个问题,其就是一个随机排列的8个或15个数在一个方正格子中移动到达规定的一个目标状态.由于只有一个空格子,故只有在空格附近的棋子可以移动. 二.算法描述 F 算法选择 此问题需要对所有可能的路径进行穷举,但是由于随着树的高度的加大,其子结点的增加宿舍剧增,所以对所有的子结点进行穷举是不大现实的.而根据当前的状态和目标状态进行对比可以用一个评估函数来评估当前状态的好坏情况.而在这里我们选择A*算法来进行求解,A*算法是一种最好优先的算法.f'(n)

c++ 读取文件-c++读取文件时怎么读取行数和列数建立动态数组

问题描述 c++读取文件时怎么读取行数和列数建立动态数组 现有一个txt文件,里面全是数字,c++读取时怎么自动判断其行数和列数,并根据行数列数建立动态数组小白求解 解决方案 行数 是通过换行字符来进行判断列数 计算两个换行符之间的字符位置来得到 通过对文件内容的按字符遍历来实现统计的功能 解决方案二: 通过换行符确定行数,通过最长一行中的字符数确定列数 解决方案三: #include <sstream>#include <string>std::string line;std::

IntelliJ里面用GridLayoutManager,如何设置行数和列数啊?

问题描述 如题,是在图形用户界面下面进行UI设计,谢谢! 解决方案 解决方案二:查看API函数解决方案三:你创建GridLayout的时候就可以指定行数和列数啊newGridLayout(introws,intcols)比如newGridLayout(5,3)创建一个5行3列的布局

知识点查缺补漏贴03:单机最大进程数,线程数和Socket连接数

前言: 参加Unix/Linux相关高级研发职位时,是否经常会被文档,单机允许最大进程数.线程数和Socket连接数,而你却感到束手无措呢?本文给你一个最为详细的答案. 一.最大进程数 运行Linux ulimit -a指令,我们可以看到:max user processes =1024 运行结构如下图所示: [root@localhost ~]# ulimit unlimited [root@localhost ~]# ulimit -a core file size (blocks, -c)

算法-[编程题] 无平方数因数的数

问题描述 [编程题] 无平方数因数的数 如果一个正整数不能被大于1的完全平方数所整除,那么我们就将该数称为无平方数因数的数.例如,靠前的一些无平方数因数的数是{12356710111314151719-}.创建一个class SquareFree,其中包括一个函数getNumber在给定一个int n后,该函数能够返回第n个最小无平方因数的数.请注意这里是从1开始的,那么如果n=1该算法将会返回最小的无平方数因数的数. n 的取值范围为1到1000000000(其中包括1和1000000000)

我们把只包含因子2、3和5的数称作丑数,编程计算第200个丑数

问题描述 我们把只包含因子2.3和5的数称作丑数,编程计算第200个丑数 我们把只包含因子2.3和5的数称作丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第200个丑数. 解决方案 http://www.shangxueba.com/ask/1192671.html 解决方案二: http://blog.csdn.net/coder_xia/article/details/6707600

求救!怎么实现: 输入日期-&amp;amp;gt;显示周数; 输入周数-&amp;amp;gt;显示日期范围

问题描述 求救!各位大牛们:请问下怎么实现:输入日期->显示周数;输入周数->显示周内日期并以周日到周六排列~多谢多谢 解决方案 解决方案二:参考相关:解决方案三:大哥!!太感谢了

aaa-设某无向图中顶点数和边数分别为n和e,所有顶点的度数之和为d,则e=

问题描述 设某无向图中顶点数和边数分别为n和e,所有顶点的度数之和为d,则e= 设某无向图中顶点数和边数分别为n和e,所有顶点的度数之和为d,则e= 解决方案 d/2 比如三角形,度数是6,那么有3条边.