将所有素数打印到N.

时间:2016-12-10 19:42:12

标签: c gcc

为什么我的 if语句无法正常工作 - 如果((l1%PrimeArr [l2])== 0)。以下是我编码的内容 -

/* Find all prime numbers<=N */

# include<stdio.h>
#define SIZE 100
void main()
{

int PrimeArr[SIZE];
int number;
int primeIndex=2; // 2 for 2 and 3 in the array
int l1;  // loop counter 1
int l2;  // loop counter 2
int l3;  // loop counter 3

// 1. 2 is the only even prime number, save this in PrimeArray

    PrimeArr[0]=2;

// 2. 3 is first odd prime number, save this in PrimeArray too.

    PrimeArr[1]=3;

// 3. ask user uptil which number he want primes.

    printf("\n Enter your number:");
    scanf("%d",&number);


// 4. for numbers 4 to N if number P is divisible by all prime numbers less than P

    for(l1=4;l1<=number;l1++){

     for(l2=0;l2<primeIndex;l2++)
     {

 // 4.1 if yes, then p is composite

        if((l1 % PrimeArr[l2]) == 0)
        break; /* found out that the number is composite so let's get out of this loop to avoid unnecessary division */

        else

        {   
            //4.2.1 save this prime in prime array

            PrimeArr[primeIndex++]=l1;


        }

    }



}

   //  display your prime array.    
for(l3=0;l3<primeIndex;l3++)
    printf("%d ",PrimeArr[l3]);

}

基本上当它到达内部循环时,if被忽略。 我想要做的是 - “如果数字可以被数组中可用的任何素数整除,则打破当前循环”但是它总是被忽略,而控制总是在其他地方。

1 个答案:

答案 0 :(得分:1)

您解决此问题的方法存在缺陷。在嵌套的for循环中,你只是检查一个数字是否是偶数,如果它不是你将它归类为一个明显不正确的素数(例如,9,15等不是素数)。

现在,您应该检查,直到该数字的一半,它可以被整除。

for(i=2; i<=number/2; ++i)
{
    // condition for nonprime number
    if(number%i==0)
    {
        flag=1;
        break;
    }
}

if (flag==0)
    PrimeArr[primeIndex++] = number;

在你的外部for循环中尝试这个。记得宣布国旗和我等。