No.15479![]() |
完全数を求めるプログラム 投稿者---たけだ(2004/07/13 12:43:16) |
||
1000までの完全数(6=1+2+3など)を配列を使わないで求めたい。 無理ですかね? |
No.15480![]() |
Re:完全数を求めるプログラム 投稿者---nop(2004/07/13 12:51:02) |
||
>無理ですかね? おそらく出来ると思われる。 |
No.15483![]() |
Re:完全数を求めるプログラム 投稿者---たいちう(2004/07/13 13:18:29) |
||
>>無理ですかね? >おそらく出来ると思われる。 むしろ素直に作ったら配列を使わないのではないかい? |
No.15487![]() |
Re:完全数を求めるプログラム 投稿者---NykR(2004/07/13 17:26:42) |
||
>1000までの完全数(6=1+2+3など)を配列を使わないで求めたい。 >無理ですかね? 配列なんて何に使うんですか? といいつつ、配列を使ったら多分こんな感じ。 #include <stdio.h> #define SIZE (1<<5) int main() { int isComposite[SIZE] = { !0,!0, }, i, j; for(i = 0; i * i <= SIZE; i++) if( !(isComposite[i]) ) for(j = i + i; j < SIZE; j += i) isComposite[j] = !0; for(i = 0; i < SIZE; i++) if( !(isComposite[i]) & !(i & (i+1)) ) printf("%d\n", i / 2 * i + i); return 0; } で、1000以下なら篩のサイズは25あれば足りるので、 配列の代わりに32ビット整数を使うこともできます。 |
No.15498![]() |
Re:完全数を求めるプログラム 投稿者---かずま(2004/07/13 23:00:49) |
||
ある数 n の約数(n を除く)の和 s が n に等しければ、n は完全数。 素直に書けば、 s = 1; for (i = 2; i < n; i++) if (n % i == 0) s += i; if (s == n) printf("%d\n", n);どこが難しいのかを説明してください。 約数を求める方法を思いつかなかったのでしょうか? |