Java初心者です。
わからないこと、解決したいこと友愛数を求めたいのですが全く結果が表示されないです。
表示ができるようにしたいです。どなたかご教示お願いいたします。
問題は以下の通りになります。
---------------prob8-14-------------
異なる2つの自然数で、自分自身を除いた約数の和が、互いに他方と等しくなるような数をいう。例えば、220の自分自身を除いた約数は、1,2,4,5,10,11,20,22,44,55,110で、和は284となる。一方、284の自分自身を除いた約数は、1,2,4,71,142で、和は220である。よって、220と284の組み合わせは友愛数という。10000以下の友愛数をすべて求めなさい。
私の書いたコードはこちらになります。
Java言語
1public static void main(String[] args) { 2 int n = 0; 3 int cn = 0; 4 int s = 0; 5 int[] x = new int[10000]; 6 int i = 0; 7 for (i = 2; i <= n; i++) { 8 if (g(i)) { // これはif(g(i)==true){と同じ。Javaでは式自体が値をもち、正しいときはtrue、正しくないときはfalseの値をもつ。 9 x[cn] = s; 10 System.out.println(i + " " + s); 11 cn++; 12 } 13 } 14 } 15 16 public static boolean g(int a) { 17 int i = 0; 18 int[] x = new int[10000]; 19 int cn = 0; 20 for (i = 0; i < cn; i++) 21 if (x[i] == a) 22 return (false); 23 int k, w; 24 int[] h = new int[10000]; 25 h[0] = 1; 26 k = 1; 27 for (i = 2; i <= a / 2; i++) { 28 if (a % i == 0) { 29 h[k] = i; 30 k++; 31 } 32 } 33 int s = 0; 34 for (i = 0; i < k; i++) 35 s += h[i]; 36 k = 1; 37 if (s == a) 38 return (false); 39 for (i = 2; i <= s / 2; i++) { 40 if (s % i == 0) { 41 h[k] = i; 42 k++; 43 } 44 } 45 w = 0; 46 for (i = 0; i < k; i++) 47 w += h[i]; 48 if (a == w) 49 return (true); 50 else 51 return (false); 52 } 53 54} 55 56 57
回答4件
あなたの回答
tips
プレビュー