HDOJ(HDU) 1406 完数

Problem Description
完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3;28=1+2+4+7+14。

本题的任务是判断两个正整数之间完数的个数。

Input
输入数据包含多行,第一行是一个正整数n,表示测试实例的个数,然后就是n个测试实例,每个实例占一行,由两个正整数num1和num2组成,(1

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        while(t-->0){
            int a = sc.nextInt();
            int b = sc.nextInt();
            if(a>b){
                a=a^b;
                b=a^b;
                a=a^b;
            }

            int num = numm(a,b);
            System.out.println(num);
        }

    }

    private static int numm(int a, int b) {
        int num =0;
        for(int i=a;i<=b;i++){
            if(is(i)){
                num++;
            }
        }
        return num;
    }

    private static boolean is(int a) {
        int num=1;
        for(int i=2;i*i<=a;i++){
            if(a%i==0){
                num=num+i;
                num=num+a/i;
            }
        }
        if(a==num){
            //System.out.println(a);
            return true;
        }
        return false;
    }

}
时间: 2024-10-23 16:31:13

HDOJ(HDU) 1406 完数的相关文章

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

HDOJ(HDU) 2097 Sky数(进制)

Problem Description Sky从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992,这个数,它的十进制数表示,其四位数字之和为2+9+9+2=22,它的十六进制数BB0,其四位数字之和也为22,同时它的十二进制数表示1894,其四位数字之和也为22,啊哈,真是巧啊.Sky非常喜欢这种四位数,由于他的发现,所以这里我们命名其为Sky数.但是要判断这样的数还是有点麻烦啊,那么现在请你帮忙来判断任何一个十进制的四位数,是不是Sky数吧. Inpu

HDOJ(HDU) 2502 月之数(进制)

Problem Description 当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数. 如果一个正整数m表示成二进制,它的位数为n(不包含前导0),寒月称它为一个n二进制数.所有的n二进制数中,1的总个数被称为n对应的月之数. 例如,3二进制数总共有4个,分别是4(100).5(101).6(110).7(111),他们中1的个数一共是1+2+2+3=8,所以3对应的月之数就是8. Input 给你一个整数T,表示输入数据的组数,

如何判断完数然后输出6=1+2+3 28=1+2+4+7+14

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<math.h> int f(int num){ int index = 0; int sum=0; int a[50]; for (int i = 1; i < num; i++){ if (num%i == 0){ a[index] = i; index++; sum += i; } } //打印数据 //更多精彩内容:http://www.bianceng

c#如何判断一个数是否是完数

完数就是该数的所有约数(能整除自己的自然数,但不包括本身)相加等于自己的数.如28就是一个完数,28=+1+2+4+7+14. 利用下面的算法可以一个数是否为完数,如果为完数输出该数所有的约数,并返回True,否则,返回False.程序代码如下: public bool IsWanShu(int Num){ int s=0; for (int i=1;i<Num;i++) { if((Num%i)==0) s=s+i; } if (Num == s) { string str = s.ToStr

c语言-C语言完数问题,新手求指点~谢谢

问题描述 C语言完数问题,新手求指点~谢谢 C语言课后习题,求1000以内的完数,按以下格式输出: 6 its factors are 1,2,3 为什么我改成和答案一样的都输出空., 代码如下:#include int main() { int m,i,s; for(m=2;m<1000;m++)//2-1000个数 { s=0; for(i=1;i<=m;i++) if((m%i)==0)s=s+i; if(s==m) { printf("%d,its factors are&q

《C语言及程序设计》实践参考——完数

返回:贺老师课程教学链接  项目要求 [项目1-完数]一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3,再如8的因子和是7(即1+2+4),8不是完数.(1)输入一个数n,判断n是否是完数[参考解答] 解1: #include <stdio.h> int main( ) { int n,s,m; printf("输入n:"); scanf("%d", &n); s=1; //s代表因子和.1是任何数的因

求1000以内的完数。并输出。

问题描述 publicclassWanShu{publicstaticvoidmain(String[]args){inti,j,h=0;for(i=1;i<=1000;i++){for(j=1,h=0;j<=i/2;j++){if(i%j==0)h=h+j;}if(h==i)System.out.print("1000以内的完数");System.out.println();System.out.print(i);}}}用java语言编的不知哪错了.运行结果是输出了1~1

第12周 报告1 --- 2-1000内的完数

任务1:(课本p86第20题)一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3,再如8的因子和是7(即1+2+4),8不是完数.编程找出1000以内的所有完数. 本文先给出我做的程序,后面加上对同学们做法的点评. [第一部分 我的报告] 实验目的:学会使用循环控制语句解决实际问题,并强化注重效率的观念 实验内容:用循环控制语句编写程序,完成表达式的计算 /* 程序头部注释开始 * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算