• [CCC 1996 01]Deficient, Perfect, and Abundant


    CCC加拿大高中生信息学奥赛

    其余来源

      CODEVS[3312]——CCC 1996 01 Deficient, Perfect, and Abundant ——http://codevs.cn/problem/3312/

      POJ[1928]——Perfection——http://poj.org/problem?id=1528

    CODEVS描述——中文题目

    题目描述 Description

    读入一个正整数n,判断整数是完数,亏数还是盈数。

    •如果它的约数的和等于它本身,那它便是一个完数(Perfect)(约数包含1,但不包含它本身)。

    •如果它的约数的和小于它本身,那它便是一个亏数(Deficient)(约数包含1,但不包含它本身)。

    •如果它的约数的和大于它本身,那它便是一个盈数(Abundant)(约数包含1,但不包含它本身)。

    输入描述 Input Description

    输入文件共两行,

    第一行为一个正整数n,

    第二行为n个正整数,中间用空格隔开。

    输出描述 Output Description

    输出为n行,分别为第1..n个数的类别。

    完数:Perfect

    亏数:Deficient

    盈数:Abundant

    样例输入 Sample Input

    3
    4 6 12

    样例输出 Sample Output

    4 is a deficient number.
    6 is a perfect number.
    12 is an abundant number.

    数据范围及提示 Data Size & Hint

    1<=n<=2^31-1

    POJ描述(英文)

    Description

    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 of b or of c, and b or c is called a divisor or factor of a. If c is not 1/-1, 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." 
    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 read END 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

    Source

     
     

    思路

      利用数论知识快速计算一个数的约数和,详见程序函数。

     

    样例

      CODEVS:

    var t,x:longint;
    
    function ans(n:longint):longint;
    var i:longint;
    begin
        ans:=0;
        for i:=1 to n do
            begin
                if (i*i=n) then
                    begin
                        ans:=ans+i;
                        break;
                    end;
                if (i*i>n) then break;
                if (n mod i=0) then ans:=ans+i+n div i;
            end;
    end;
    
    procedure main;
    var anss,n:longint;
    begin
        read(n);
        anss:=ans(n)-n;
        if anss<n then writeln(n,' is a deficient number.');
        if anss=n then writeln(n,' is a perfect number.');
        if anss>n then writeln(n,' is an abundant number.');
    end;
    
    begin
        readln(t);
        for x:=1 to t do main;
    end.
    View Code

      POJ:

    var t,x,n:longint;
    
    function ans(n:longint):longint;
    var i:longint;
    begin
        ans:=0;
        for i:=1 to n do
            begin
                if (i*i=n) then
                    begin
                        ans:=ans+i;
                        break;
                    end;
                if (i*i>n) then break;
                if (n mod i=0) then ans:=ans+i+n div i;
            end;
    end;
    
    procedure main;
    var anss,x,i:longint;s:ansistring;
    begin
        anss:=ans(n)-n;
        str(n,s);
        x:=length(s);
        for i:=1 to 5-x do write(' ');
        if anss<n then writeln(n,'  DEFICIENT');
        if anss=n then writeln(n,'  PERFECT');
        if anss>n then writeln(n,'  ABUNDANT');
    end;
    
    begin
        writeln('PERFECTION OUTPUT');
        while true do
            begin
                read(n);
                if n=0 then
                    begin
                        writeln('END OF OUTPUT');
                        halt;
                    end;
                main;
            end;
    end.
    View Code
  • 相关阅读:
    按格式读取csv文件内容
    C#分块拷贝大文件
    在 Active Directory 上也有 LINQ 可以用了:LINQ to Active Directory
    CSVDE
    lucene索引查看工具luke和文本提取工具Tika
    Perf工具
    RHEL7.2安装
    Hive on ES
    灰度发布
    LSM树由来、设计思想以及应用到HBase的索引
  • 原文地址:https://www.cnblogs.com/yangqingli/p/4906400.html
Copyright © 2020-2023  润新知