ページ 11

mathematicaの友愛数プログラムについて

Posted: 2009年1月31日(土) 00:02
by みみ
1~1000内にある 友愛数全て表示するにはどのような感じで打ち込めばよいのでしょうか?
友愛数プログラムでC言語はわかるのですが・・・よろしくお願いします

Re:mathematicaの友愛数プログラムについて

Posted: 2009年1月31日(土) 00:24
by s-rush
>友愛数全て表示するにはどのような感じで打ち込めばよいのでしょうか?
というのは1~1000内から計算で友愛数を求めだして、
その結果を表示する
ということですか?


ちなみに、友愛数って1~1000の間だと
(220、284)
の一つしか存在しなかったのでは?

違ったらごめんなさい。

Re:mathematicaの友愛数プログラムについて

Posted: 2009年1月31日(土) 02:00
by みみ
はい。 友愛数は1000内には1つしかありません;;
それに 結果を表示するための プログラムがわからないということです><
ヘタな日本語ですいません。

Re:mathematicaの友愛数プログラムについて

Posted: 2009年1月31日(土) 02:27
by dic
C言語でしたら
printfが使えます
友愛数などというものがこの世に存在するのですね
実におもしろい

Re:mathematicaの友愛数プログラムについて

Posted: 2009年1月31日(土) 07:43
by toyo
Mathematicaでの記述法が知りたいということでしょうか
私は触ったことないのでわかりませんが

Re:mathematicaの友愛数プログラムについて

Posted: 2009年1月31日(土) 10:43
by やそ
規約に
●投稿する内容について
「C言語で何かわからない事についての質問」を、主としていますが、規制はありません。C言語関連以外でも自由に何でも質問してください。


とありますので、どのような言語の質問も問題にはなりませんが、
流石に良解答が得られる保証はできません。

mathematica側のサポートや掲示板、コミュなどで聞かれたほうが解答が得られやすいと思います。

友愛数プログラムでC言語はわかるのですが・
ということはC言語では友愛数のプログラムが組めるということでしょうか?
それとも、C言語は少しは齧っているが友愛数のプログラムが組めないので、教えて欲しい。
できればmathematicaのプログラムで・・・

ということなのでしょうか?
C言語であれば、
「表示するには」と質問されているのでそれに対する回答はすでにあがっているとおり、
printfで問題ないと思います。

1から1000まで約数を計算する。
約数の和を計算し変数(構造体でも配列でもなんでも)などで保管する。
次は・・・
もういちど1から1000のループ
保管しておいた約数の和を取り出す。(A)
(A)で示される数に保管されている約数の和を取り出す(B)
現在のループカウンターと(B)を比較して合致していれば友愛数
合致していなければ次のループへ

てな感じで調べればよい?
でも数が大きくなると約数の和が1000を越えそう・・・
その辺はループ内でチェックしてはじけばいいか。
ちゅーか1000を越えるようならそこで打ち切りか?

全部想像(思いつき)で書いているので
この流れで良いかも分かりませんが、
頑張って下さい。

友愛数とか面白そうですね。

Re:mathematicaの友愛数プログラムについて

Posted: 2009年1月31日(土) 15:21
by lbfuvab
友愛数ならば(C言語なら)[使用する変数:int sum[1000],i,j]
①1~1000までの約数の和をそれぞれsum[1000]に代入する
②iに0を代入する
③jにsumを代入し、j<1000なら④へ、それ以外は⑤へ
④i==sum[j] かつ j==sumならi,jを表示
⑤iをインクリメントしi>999ならプログラムを終了、それ以外なら③へ

ですかね?

Re:mathematicaの友愛数プログラムについて

Posted: 2009年2月01日(日) 23:19
by kokosan60
C言語で書いたプログラム
#include <stdio.h>
#define N 10000
int main(void)
{
	int i,j;
	int sum[N]={0};

	for(i=1;i<N;i++){
		for(j=1;j<i;j++){
			if(i%j==0){
				sum+=j;
			}
			/*計算打ち切り*/
			if(sum>=N){
				sum=-1;
				break;
			}
		}
	}
	for(i=1;i<N;i++){
		if(sum!=-1&∑<N){
			if(sum[sum]==i&∑!=i){
				printf("友愛数(%d,%d)\n",sum,i);
			}
		}
	}
	return 0;
}