2016-12-10 62 views
0

为什么我的if语句没有按预期工作 - if((l1%PrimeArr [l2])== 0)。以下是我所编码的内容 -打印所有素数直到N

/* 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被忽略。 我想要做的是 - “如果数字可以被数组中的任何素数整除,则打破当前循环”,但它总是被忽略,并且控制始终在else中。

+0

经过测试,如果即使在线编译器工作,你有逻辑错误的想法。 – koper89

回答

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; 

在你的outer for循环中试试这个。请记住宣布国旗和我等

+0

嗯..把它..谢谢先生.. –