C++ 浮点异常 #包括 #包括 int填充_素数(int数组[]) { const int max=1000000; 字符数[max+1]; 整数计数=1; 数组[0]=2; 对于(int i=max;i>0;i-=2)个数[i]=0; 对于(int i=max-1;i>0;i-=2)个数[i]=1; int i; 对于(i=3;i*i
在您的因式分解方法中,您可以访问数组[0],因为i的初始值是0。 此数组是由populate_primes填充的primes数组。但是populates prime不会写入primes[0],因为count的初始值为1C++ 浮点异常 #包括 #包括 int填充_素数(int数组[]) { const int max=1000000; 字符数[max+1]; 整数计数=1; 数组[0]=2; 对于(int i=max;i>0;i-=2)个数[i]=0; 对于(int i=max-1;i>0;i-=2)个数[i]=1; int i; 对于(i=3;i*i,c++,C++,在您的因式分解方法中,您可以访问数组[0],因为i的初始值是0。 此数组是由populate_primes填充的primes数组。但是populates prime不会写入primes[0],因为count的初始值为1 因此,第一个元素没有初始化,您可能会得到一个div by 0错误。尝试使用下面的函数查看一些问题: #include <cstdio> #include <ctime> int populate_primes(int array[]) {
因此,第一个元素没有初始化,您可能会得到一个div by 0错误。尝试使用下面的函数查看一些问题:
#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;
}
#定义最大素数42000
整数分解(整数,整数数组[])
{
int i=0,系数=1;
对于(i=0;数值>0&&i0){
printf(“%d%d\n”,数字,数组[i]);
数字/=数组[i];
}
}
}
}
printf(“%d\n”,系数);
回报系数;
}
您需要将从“填充”中获得的大小传递给“因子分解”。
因式分解(整数,整数数组[],整数大小);问题是您的数组[]未完全加载,它只加载到大小变量。所以您可能需要检查它。
此外,因式分解内部的逻辑也是错误的。您需要检查(数字>1)而不是(数字>0)。检查数组是否超出范围?以及数组[i]!=0可能是由于
number%array[i]==0
导致的,当array[i]
为0
i已初始化数组[0]=2;因此这不应该是问题。这里的问题是编号>1。
#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;
}