main()
{
int prime_array[2339],prime1_count=0,mul1_count=0;
int i, prime, lim_up, lim_low, n,j=0;
int mul,count=0;
int mul_count[65026]={0},number[7096];
printf("\n ENTER THE LOWER LIMIT…: ");
scanf("%d", &lim_low);
printf("\n ENTER THE UPPER LIMIT…: ");
scanf("%d", &lim_up);
for(n=lim_low+1; n<lim_up; n++)
{
prime = 1;
for(i=2; i<n; i++)
if(n%i == 0)
{
prime = 0;
break;
}
if(prime)
{
prime_array[j]=n;
j++;
}
}
for(i=1;i<=255;i++)
{
for(j=1;j<=255;j++)
{
mul = j*i;
mul_count[mul]++;
}
}
for(i=1;i<=65025;i++)
if( mul_count[i]!=2 && mul_count[i]!=0 )
{
number[count]=i;
count++;
}
for(prime1_count=0;prime1_count<2339;prime1_count++)
{
printf("\nprime number used is:%d",prime_array[prime1_count]);
for(mul1_count=0;mul1_count<7096;mul1_count++)
{
printf("\n%d\t",number[mul1_count] % prime_array[prime1_count]);
}
}
}
我想找到(number[mul1_count] % prime_array[prime1_count] )
的模数,但我得到的输出是错误的。这里的错误是什么?素数应该在40000到65025的范围内。我应该在这里做些什么改变?
答案 0 :(得分:0)
我真的不知道你要做什么,但是在运行你的程序时,我得到的是Floating Point Exception
,因为当number[mul1_count] % prime_array[prime1_count]
为prime_array[prime1_count]
时0
}
使用for
if(prime_array[prime1_count] != 0)
循环
for(prime1_count=0;prime1_count<2339;prime1_count++)
{
if(prime_array[prime1_count] != 0)
{
printf("\nprime number used is:%d",prime_array[prime1_count]);
for(mul1_count=0;mul1_count<7096;mul1_count++)
{
printf("\n%d\t",number[mul1_count] % prime_array[prime1_count]);
}
}
}
最好还要尝试解释你想做什么,你期望什么,得到什么等等......
修改:
另外,作为旁注。您应该稍微更改计算素数的循环。原因是您没有跟踪计算出的素数。然后你
for(prime1_count=0;prime1_count<2339;prime1_count++)
遍历整个prime_array[]
。
想象一下你只计算了5个素数的情况,这意味着剩下的数组会留下任何数字。没有理由进行额外的计算,留下来确保prime_array在代码中没有被初始化为零,这意味着它(afaik)包含垃圾值,在你的算法中没有分配素数的indeces中。这意味着
if(prime_array[prime1_count] != 0)
如果您认为那里存在垃圾值,可能会失败。
初始化prime_array[2339] = { 0 };
或强>
我会这样做:
int number_of_primes=0;
for(n=lim_low+1; n<lim_up; n++)
{
prime = 1;
for(i=2; i<n; i++)
if(n%i == 0)
{
prime = 0;
break;
}
if(prime)
{
if(number_of_primes < 2338)
{
prime_array[number_of_primes]=n;
number_of_primes++;
}else
{
break;
}
}
}
...
for(prime1_count=0 ; prime1_count < number_of_primes+1 ; prime1_count++)
{
printf("\nprime number used is:%d",prime_array[prime1_count]);
for(mul1_count=0;mul1_count<7096;mul1_count++)
{
printf("\n%d\t",number[mul1_count] % prime_array[prime1_count]);
}
}