• 締切済み

友愛数を探すプログラム

可能なかぎりたくさんの有愛数を探すプログラムをつくりたいのですが、やり方が全くわかりません。。。 どうすればいいんでしょうか?

みんなの回答

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

因数分解は面倒だから、単純に i = 1 から i = √n までループをまわして、i が n を割切るたびに i と n/i をサマリーしていけばいいんじゃない?

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アルゴリズム (1)まず『求める数』の素因数分解を行います。 (2)素因数分解された数をすべて加算します。 (3)加算した結果の『数』を素因数分解します。 (4)(3)で素因数分解された数をすべて加算します。 (5)(4)で加算された数が(1)で『求める数』と一致すれば『友愛数』になります。 (6)順番に1桁、10桁、100桁、1000桁…と総当りで調べる事になりそうです。 その他: ・上記の方法以外に最初にすべての数の素因数分解を行い、その数をすべて加算した結果を  配列などに格納します。例えば 1~1000 桁までを計算して、その後に配列内容が同じに値に  なればそのペアが『友愛数』になります。 ・以上。まずは『素因数分解』の部分を作成して下さい。

参考URL:
http://contest.thinkquest.gr.jp/tqj2002/50027/page048.html

関連するQ&A

  • 素数を探すプログラム…。

    今作っているプログラムで素数を使用したいのですが、素数を探すプログラムが分からなくて困っています。 どなたか初心者の私にも分かるプログラムを教えていただけませんか? (VB自体には素数を探す関数とか持っていないのでしょうか…?) お願いします。 (P.S)本当は出来るだけ多く探したいのですが確か無限にあるんですよね…。

  • 友愛数について

    ピタゴラスが初めて友愛数220と284の組み合わせを発見して、イタリアのニコロ・パガニーニが1184と1210の組み合わせを発見しました。ただ1組です。デカルトとフェルマーが発見した組み合わせもただ1組だそうですが、その組み合わせを知っている方は教えてください。あと、18世紀最大、最高の数学者レオンハルト・オイラーは66組(間違っていたらすいません)も発見したということですが、この人物は、人類の至宝と呼ばれているオイラーの公式を発見しましたがやはりただ者ではないと思います。その組み合わせも知りたいです。また、どのようにして発見したのかも知りたいです。あと、現在、発見されている組み合わせは何組かも知りたいです。あと、奇数と偶数の友愛数の組み合わせは見つかってないそうですが、予想としては無いのでしょうか。もうひとつ、友愛数は無限にあることは予想されているのでしょうか。欲張ってすいません。

  • 2進数を10進数にするプログラム作成について

    10進数から2進数に変換するプログラムはできたのですが2進数から10進数に変換するプログラムが作れません。。 値を入力してください:1111←と入力(例) 10進数では15です。 もう一度実行しますか?(1…yes/2…no) というプログラムを作ろう思っています。 うまく作れずエラーばかり起きてしまいます。 どうか教えて下さい。お願いします。

  • VBAで2進数を返すプログラムのつくりかた、教えてください!

    10進数を引数としたとき、戻り値で2進数を返すプログラム(関数)を作りたいと考えています。イメージとしては、商を2で次々に割っていき、あまりを逆から並べるのかなーと思ったのですが、実際にプログラムを書くとなると、手が止まってしまいます(泣)。どなたか、すぐにでも教えてくださーい!

  • プログラムのクロック数

    プログラムからクロック数を割り出したいのですが やり方がわかりません。やり方を教えてください。 たとえば アドレス ニーモニック 機械語 8000   IN A,(01H)  DB 01 8002   OUT (00H),A D3 00 8004   JP 8000H   C3 00 80 というようなプログラムです。 このプログラムのクロック数は25と書いて あるんですが求め方がわからないので 誰か教えてください。

  • 2進数から10進数へ変換プログラム

    皆さんこんにちは (・。・) 2進数から10進数へ変換プログラムを作りたいのですが、分かりません 自分の電卓機で計算すると  1011=11 1010=10 101010=42 現在 O'rielly の本をよんでいますが、書いたこともちょっと分かりづらいので、お願いします。 有難うございます

  • 8進数と16進数で表示するプログラム

    int型変数bに10進数として数値を入力し、その値を実行結果のように8進数と16進数で表示するプログラムを作成しなさい という問題にとりかかっているのですが、いまいち理解できません scanfで値を入力させる項目は必要とわかるのですが、その他がどうしてもわかりません、ご教授して頂ければ幸いです

  • 10進の自然数を2進数に変換するプログラム

    10進の自然数を2進数に変換するプログラム(java)を教えてください 整数型の変数aから第bビット目(最初を下位ビットとして第0ビットとする)を取り出すメソッドを作成して、プログラムを組みたいのですが、やり方がいまいちわかりません。 どなたかわかる方よろしくお願いします!

  • 素数を求めるプログラム

    1000以下の素数を求めるプログラムについての問題について考えているのですが、何故2の数のとき、乗除を行う回数が加算されないのかが分かりません。また、3のとき乗除を1回しか行わないのか分かりません。理論的に2が素数となるのは定義付けられているから必要ないのか、とも思ったのですがそれならcounter++で2が範囲にあるのに加算されないという理由がよくわかりません。 初歩的な問題ですみませんが回答頂けると有難いです。 プログラムは下記の通りです。 #include <stdio.h> int main(void) { int i,no; unsigned long counter = 0; for (no = 2; no <= 1000; no++) { for (i = 2; i < no; i++) { counter++; if (no % i == 0) break; } if (no == i) printf("%d\n" , no); } printf("乗除を行った回数:%lu\n" , counter); return (0); }

  • 二進数にするプログラム

    C言語の問題なんですが、なかなかできません。 途中までやったんですがこれからどうすればいいか分かりません。 1、まず、整数をどんどん入力し、最後に負の数を入力する。負の数が入力されると、これまで入力された数を逆順で表示するプログラムを作成する。 2、1でできたものを利用して、何か数字が入力されたら、それを二進数に直すプログラムを作成する。ただし、二進数の桁数は1000桁以内とする。 ここまでやったんですがこれからどうすればいいか分かりません。 どなたか知恵を貸してくれませんか? #include<stdio.h> int main() { int z[1000],Z,i; printf("正の整数を入力してください:\n"); for(i=0;1<1000;i++); { scanf("%d",&z[i]); if(z[i]<0) break; } Z=i; for(i=0;i<Z/2;i++) { int temp=z[i]; z[i]=z[Z-1-i]; z[Z-1-i]=temp; } printf("入力した要素を逆順に並べると:\n"); for(i=0;i<Z;i++) printf("%d\n",z[i]); return(0); }