題目描述
任何一個自然數的約數中都有1和它本身,我們把小於它本身的因數叫做這個自然數的真約數。 如6的所有真約數是1、2、3,而且6=1+2+3。像這樣,一個數所有真約數的和正好等於這個數,通常把這個數叫做完美數。 古希臘人非常重視完美數。畢達哥拉斯發現它之後,人們就開始了對完美數的研究。 現在要求輸出所有在m和n範圍內的完美數。
輸入
輸入數據有多組,每組佔一行,包括兩個整數m和n(1≤m≤n≤99999999)。 輸入以0 0結束
輸出
對於每個測試實例,要求輸出所有在給定範圍內的完美數,就是說,輸出的完美數必須大於等於m並且小於等於n,如果有多個,則要求從小到大排列在一行內輸出,之間用一個空格隔開; 如果給定的範圍內不存在完美數,則輸出No; 每個測試實例的輸出佔一行。
樣例輸入
1 100 0 0
樣例輸出
6 28
提示
也許你應該要知道1->99999999之間的完美數只有:6, 28, 496, 8128, 33550336。
【AC代碼】
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long s[] = { 6, 28, 496, 8128, 33550336 };
while (sc.hasNext()) {
int k = 0;
long a1 = sc.nextLong();
long a2 = sc.nextLong();
if (a1 == 0 && a2 == 0)
break;
for (int i = 0; i < 5; i++) {
if (a2 >= s[i] && a1 <= s[i]) {
k++;
System.out.print(s[i] + " ");
}
}
if (k == 0)
System.out.print("No");
System.out.println();
}
}
}