-3

n番目の醜い数(5よりも大きい素因数が少なくとも1つある数)を見つけるコードを作成しました。ここで、nは指定された入力です。ユーザーが240未満のものを入力すると、プログラムは正常に実行されます。ただし、入力がそれより大きくなると、プログラムがクラッシュします。私の質問は、それが時間のかかる問題である場合、それは時間がかかるはずですが、なぜプログラムがクラッシュするのですか?どこでもダブルを使っているので、可変容量の問題ではないかもしれません!! 私のコードは以下の通りです:

#include<stdio.h>
#include<math.h>
double primes[1000]={2,3,5};
int serial=3;
double next_prime()
{
    double f=primes[serial-1]+2;
    int count;
    for(count=1;primes[count]<=(sqrt(f)+1) && count<serial;count++){
        if(fmod(f,primes[count])==0){
            f+=2;
            count=1;
        }
    }
    return primes[serial++]=f;
}
int main()
{
    double ugly_serial=12,ugly_number=16,j;
    int c,count,loop,input;
    scanf("%d",&input);
    while(ugly_serial<input)
    {
        loop=0;
        for(c=3;primes[c-1]<=sqrt(ugly_number);c++){
            j=next_prime();
        }
        for(count=3;count<c;count++){
            if(fmod(ugly_number,primes[count])==0){
               loop=1;
                break;
            }
        }
        if(loop==0){ugly_serial++;}
        ugly_number++;
    }
    printf("%.0lf",ugly_number);

    return 0;
}
4

1 に答える 1

0

コードをコンパイルして実行しました。プログラムは、56565を含め、私が試したすべての入力で正常に動作します。

プログラムの最新のコンパイル済みバージョンを実行していることを確認しますか?

于 2012-08-14T13:15:32.037 に答える