3
#include <cstdio>
#include <ctime>

int populate_primes(int array[])
{   
    const int max = 1000000; 
    char numbers[max+1];
    int count=1;
    array[0]=2;
    for(int i=max;i>0;i-=2)numbers[i]=0;
    for(int i=max-1;i>0;i-=2)numbers[i]=1;
    int i;  
    for(i=3;i*i<=max;i+=2){
        if(numbers[i]){
            for(int j=i*i;j<max+1;j+=i)numbers[j]=0;            array[count++]=i;
        }
    }
    int limit = max/2;
    for(;i<limit;i++)   if(numbers[i])array[count++]=i;
    return count;
}

int factorize(int number,int array[])
{
    int i=0,factor=1;
    while(number>0){
        if(number%array[i]==0){
            factor++;
            while(number%array[i]==0)number/=array[i];
        }
        i++;
    }
    printf("%d\n",factor);
    return factor;
}
int main()
{
    int primes[42000];
    const int max = 1000000;
    int factors[max+1];
    clock_t start = clock();
    int size = populate_primes(primes);
    factorize(1000,primes);
    printf("Execution time:\t%lf\n",(double)(clock()-start)/CLOCKS_PER_SEC);
    return 0;
}

私はいいえを見つけようとしています。単純なアルゴリズムを使用した因子の計算。素数の入力部分は正常に実行されていますが、因数分解部分は実行されず、浮動小数点例外エラーが発生します。

コードを見て、私の間違いを教えてください。

4

3 に答える 3

1

factorizeメソッドでは、iの初期値が0であるため、array [0]にアクセスします。この配列は、populate_primesによって設定される素数配列です。ただし、countの初期値は1であるため、populatesprimeはprimes[0]に書き込みません。

したがって、最初の要素は初期化されず、おそらくdivby0エラーが発生します。

于 2012-12-18T06:14:14.937 に答える
0

以下の関数を試して、いくつかの問題を確認してください。

#define MAX_PRIMES 42000
int factorize(int number,int array[])
{
  int i=0,factor=1;
  for (i=0; number>0 && i< MAX_PRIMES; i++){
    if (array[i] == 0 || array[i] == 1) {
      printf("Error: array[%d] = %d\n", i, array[i]);
    } else {
      if(number%array[i]==0){
        factor++;
        while(number%array[i]==0 && number>0) {
          printf("%d %d\n", number, array[i]);
          number/=array[i];
        }
      }   
    }   
  }
  printf("%d\n",factor);
  return factor;
}
于 2012-12-18T06:18:37.753 に答える
0

因数分解するには、populateから取得したサイズを渡す必要があります。factorize(int number、int array []、int size);
問題は、array []が完全にロードされておらず、サイズ変数までしかロードされないことです。だからあなたはそれをチェックしたいかもしれません。
また、因数分解内のロジックが間違っています。(number> 0)ではなく(number> 1)をチェックする必要があります。

于 2012-12-18T06:25:22.637 に答える