AOJ2101 Perfect Number

問題リンク Perfect Number

  • 解法

1つのNあたり、O(√N)で判定できます。
i を1〜√Nの範囲だけ回し、Nを割り切るものを見つけたらそれは約数で、同時にN/iも約数です。
同じ数を重複して加算しないように注意が必要です。

  • ソース
import java.util.Scanner;

//Perfect Number
public class AOJ2101 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(true){
			int n = sc.nextInt();
			if(n==0)break;
			if(n==1){
				System.out.println("deficient number");
				continue;
			}
			int s = 1;
			for(int i=2;i*i<=n;i++){
				if(n%i==0){
					if(i*i==n)s+=i;
					else s+=i+n/i;
				}
			}
			System.out.println(n==s?"perfect number":n>s?"deficient number":"abundant number");
		}
	}
}