許せない心理テスト

プログラムが…

以下のプログラムを作っているのですが、よく分かりません・・・

A監督が 77,B走塁コーチは 78 です.さて,77 と 78の素因数の和は等しくなっています.
つまり,77=7×11,78=2×3×13,7+11=18,2+3+13=18 となっています.
このように,素因数の和が互いに等しいという条件を満たすような,
差が 1 の自然数の組を 20000 以下でできるだけ多く探索しましょう.
ここで,20000 以下には 26 組しかないことがわかっています.

#include<stdio.h>
#difine MAX 20000

int main(){
int sum[MAX+1];
int i,j,n;

for(i = 2;i <= MAX;i++){
j = 2;
while(j*j <= i){
if(i % j == 0){
_________________;
break;
}
else
j++;
}
if(j*j > i)
___________________;
}
n = 0;
for(i = 2;i < MAX;i++)
if(sum[i] == sum[i+1]){
n++;
printf("%3d (%d,%d)\n",n,i,i+1);
}
return 0;
}

補足
分からないのはプログラムの書き方で
_________________;の部分だけでも答えていただけるとありがたいです。

A 回答 (5件)

#3さんのコードはきれいだけど、再帰を使ったりしてちょっと高度なので、オーソドックスなコードを。



最初のFor文の箇所だけ書いておきます。

for(i = 2; i <= MAX; i++){
sum[i] = 0;
n = i;
j = 2;
while(j * j <= n){
if(n % j == 0){
sum[i] += j;
n /= j;
}
else
j++;
}
sum[i] += n;
}
    • good
    • 0

実は問題があいまい.


たとえば 12 に対して「素因数の和」は 5 と 7 の 2通りの考え方がある.
どっち?
    • good
    • 0

 プログラムなんて100人いれば100通りの書き方があるのだから、コメントも何も無くて何を意図しようとした構造なのかわからない穴埋め問題なんて解読が面倒でやってられないので、とりあえず同じ機能を実現するものを作ってみまちた。



#include <stdio.h>
#define MAX 20000

// 素因数の合計を求める
int SumOfPrimeFactor(int num)
{
int i;
for (i = 2; i < num; i++) {
if (num % i == 0) {
return(i + SumOfPrimeFactor(num / i));
}
}
return(num);
}

// MAXまでの隣接する数値の素因数の合計が等しい組み合わせを探す
void main()
{
int sum1 = -1;
int sum2 = 0;
int cnt = 0;

for (i = 2; i <= MAX; i++) {
sum2 = SumOfPrimeFactor(i);
if (sum2 == sum1) {
cnt++;
printf("%3d (%d, %d)\n", cnt, i - 1, i);
}
sum1 = sum2;
}
}
    • good
    • 0

このプログラムは誰が作ったの?



プログラム自体のアルゴリズムが間違っているから、_________________;の部分に何を入れてもうまくいかないよ。
    • good
    • 0

アルゴリズムはわかるのですね?



以下に似たような質問があるので、参考にされてはいかがでしょうか。
http://detail.chiebukuro.yahoo.co.jp/qa/question …

この回答への補足

アルゴリズムも全然分かりません(泣)

補足日時:2010/11/11 15:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報