划分两个数组元素

时间:2010-12-24 10:37:31

标签: c

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的范围内。我应该在这里做些什么改变?

1 个答案:

答案 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]);
    }
}