zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    ajaxFileUpload 实现多文件上传(源码)
    Springboot 热部署的两种方式
    基于树莓派3B+Python3.5的OpenCV3.4的配置教程
    Shiro 架构原理
    Cron表达式
    SpringBoot中Scheduled代码实现
    Linus安装mysql8
    查看虚拟机CENTOS7 的 IP 地址和命令
    linux vi保存退出命令 (如何退出vi)
    Linux常用命令大全
  • 原文地址:https://www.cnblogs.com/yangqingli/p/4906400.html
Copyright © 2011-2022 走看看