質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

5644閲覧

友愛数を求めたいです。

ssssa

総合スコア39

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

3クリップ

投稿2018/07/23 14:08

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
DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/07/24 00:56

質問編集画面タイトル横にある「初心者アイコン」をご活用ください。「初心者」と質問で書くよりも伝わりますし、質問一覧に表示されるのでわかりやすくなります。
guest

回答4

0

mainメソッドで、nが0のままforループに入っているため、一度もループに入れません。
10000までであるならnを10000にするべきでは?

約数の総和を求めるメソッドを他と違えてみた

java

1 public static void main(String[] args) { 2 for (int i = 1; i <= 10000; i++) { 3 int j = sumOfDivisor(i); 4 if (i < j && sumOfDivisor(j) == i) { 5 System.out.println(i + " " + j); 6 } 7 } 8 } 9 10 public static int sumOfDivisor(int a) { 11 int c = a; 12 int sum = 1; 13 14 for (int i = 2; c >= i * i; i++) { 15 int multi = 1; 16 int tempSum = 1; 17 while (c % i == 0) { 18 c /= i; 19 multi *= i; 20 tempSum += multi; 21 } 22 sum *= tempSum; 23 } 24 if (c != 1) { 25 sum *= 1 + c; 26 } 27 return sum - a; 28 }

投稿2018/07/23 17:02

編集2018/07/26 16:23
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssssa

2018/08/05 14:11

お返事が遅れてしまい大変申し訳ございません。 ソースありがとうございます。 参考にさせていただきます。 本当にありがとうございます。
guest

0

ベストアンサー

友愛数を出すためには何度かループ処理が必要となりますね。

  1. まず約数を出す処理を作る
  2. 次に友愛数を出すために、1の約数の総和からその数自身を引いた値を出す
  3. ある数Aに友愛数があるかを導き出す処理を作る→ Aを処理2.で定義した処理にいれ、得られた数をBとし、さらにBを処理2.で定義した処理にいて、得られた数がAと同じこと
  4. Aを2から10000まで繰り返す

これらを一気に作るのではなく、メソッドやクラスに分割すると、わかりやすいかと思います。
参考までに、ソースを以下においてあります。

約数
友愛数

投稿2018/07/27 04:40

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssssa

2018/08/05 14:08

お返事が遅れまして申し訳ございません。 ソースありがとうございます。 参考にさせていただきます。
guest

0

java

1public class Main { 2 public static void main(String[] args){ 3 4 for(int num1 = 1; num1 <= 10000; num1++){ 5 int num2 = sum_divisor(num1); 6 if(num1 == sum_divisor(num2) && num2 < num1){ 7 System.out.println(num2 + " " + num1); 8 } 9 } 10 } 11 public static int sum_divisor(int n) 12 { 13 int sum = 0; 14 15 for(int i = 1; i < n; i++){ 16 if(n % i == 0){ 17 sum += i; 18 } 19 } 20 return sum; 21 } 22} 23

投稿2018/07/26 05:46

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssssa

2018/08/05 14:08

お返事が遅れまして申し訳ございません。 ソースありがとうございます。 参考にさせていただきます。 本当にありがとうございます。
guest

0

javascript

1((max)=>{ 2 // 約数の和を求める 3 const ds = function(i){ 4 let sum = 1; 5 for(let n = 2; n <= (i/2); n++){ 6 sum += (i%n==0)?n:0; 7 } 8 return sum; 9 }; 10 // maxまでの友愛数を探す 11 for(let i = 1; i <=max; i++){ 12 let d = ds(i); 13 if(i >= d){ 14 // 約数の和が元の数以下の場合は無視 15 continue; 16 } 17 // 友愛数が見つかればconsole出力 18 if(i == ds(d)){ 19 console.log("("+i+","+d+")"); 20 } 21 } 22})(10000) 23 24//(220,284) 25//(1184,1210) 26//(2620,2924) 27//(5020,5564) 28//(6232,6368)

投稿2018/07/24 04:57

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssssa

2018/08/05 14:10

お返事が遅れまして大変申し訳ございません。 参考ソースありがとうございます。 参考にさせていただきます。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問