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.
Getestet und wenn funktioniert auch auf Online-Compiler, haben Sie Logik falsch dort dachte. – koper89