题目1050:完数 题目1060:完数VS盈数

来源:互联网 发布:亚特兰大机场数据 编辑:程序博客网 时间:2024/05/18 19:23

题目1050:完数

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:6390

解决:2635

题目描述:

    求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。

输入:

    测试数据有多组,输入n,n数据范围不大。

输出:

    对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。

样例输入:
6
样例输出:
6

题目1060:完数VS盈数

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:4873

解决:1809

题目描述:

一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。
求出2到60之间所有“完数”和“盈数”。

输入:

题目没有任何输入。

输出:

输出2到60之间所有“完数”和“盈数”,并以如下形式输出:
E: e1 e2 e3 ......(ei为完数)
G: g1 g2 g3 ......(gi为盈数)
其中两个数之间要有空格,行尾不加空格。

样例输入:
样例输出:

参考代码:

import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main {public static void main(String arg[]){//1050 完数/*Scanner sc = new Scanner(System.in);List<Integer> list1 = new ArrayList<Integer>();int count=2;while(sc.hasNext()){Integer x = sc.nextInt();for(int i=count;;i++){if(i>x) break;int total=1;int half =(int)Math.floor(Math.sqrt((double)i));for(int j=2;j<=half;j++){if(i%j==0) total += j+i/j; }if(total==i) list1.add(i);count++;}int count1=0;for(Integer i:list1){if(i>x) break;if(count1!=0) System.out.print(" ");System.out.print(i);count1=1;}System.out.println();//System.out.print(string.contains(c));}*///1060 完数 和盈数List<Integer> list1 = new ArrayList<Integer>();List<Integer> list2 = new ArrayList<Integer>();for(int i=2;i<=60;i++){int total=1;int half =(int)Math.floor(Math.sqrt((double)i));for(int j=2;j<=half;j++){if(i%j==0) total += j+((j!=i/j)?i/j:0); }if(total==i) list1.add(i);if(total>i) list2.add(i);}System.out.println("E: "+list1.toString().replaceAll("[\\[\\]\\,]", ""));System.out.println("G: "+list2.toString().replaceAll("[\\[\\]\\,]", ""));}}




0 0