2016-12-10 4 views
0

Warum meine if-Anweisung nicht wie gewünscht funktioniert - if ((l1% PrimeArr [l2]) == 0). Unten ist, was ich codiert habe:Drucken aller Primzahlen bis 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]); 

} 

Grundsätzlich, wenn es die innere Schleife erreicht, wird das If ignoriert. Was ich tun möchte, ist - "brechen Sie die aktuelle Schleife, wenn die Zahl durch eine beliebige Primzahl im Array teilbar ist", aber es wird immer ignoriert und das Steuerelement wird immer in die Else.

+0

Getestet und wenn funktioniert auch auf Online-Compiler, haben Sie Logik falsch dort dachte. – koper89

Antwort

1

Ihr Ansatz für dieses Problem ist fehlerhaft. In der verschachtelten for-Schleife überprüfen Sie nur, ob eine Zahl eine gerade Zahl ist oder nicht, und wenn Sie es nicht als Primzahl kategorisieren, ist das offensichtlich nicht richtig (z. B. 9,15, usw. sind nicht prim).

Nun, was Sie tun sollten, sollten Sie überprüfen, bis diese Nummer halb so teilbar ist oder nicht.

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

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

Versuchen Sie, diese für Schleife in Ihre äußere. Denken Sie daran, Flag und i usw. zu erklären.

+0

Hmm..hat es ..danke sir .. –