Kann mir bitte jemand sagen, warum mein Programm alle Primzahlen bis zur Eingabe n
ausgibt und auch nur die Nummer n+2
(ob prime oder nicht)? Und manchmal auch n+1
, wenn es prim ist, z.B. Für die Eingabe n=10
ist die Ausgabe 2,3,5,7,11,12
.C-Code für Sieb von Erasthenes
ist hier mein Code:
/*Write a program that reads in a number n between 1 and 100,000 and then lists all the prime numbers between 1 and n inclusive.*/
#include
#define LIMIT 100000 /*size of integers array*/
#define PRIMES 100000 /*size of primes array*/
int main(){
int i,j,numbers[LIMIT];
int primes[PRIMES];
int n, count;
count = 0;
/*Read in an upper limit, n*/
printf("Please enter a value for n: ");
if (scanf("%d", &n) !=1) {
printf("Sorry, cannot read n.\n");
return 1;
}
/*fill the array with natural numbers*/
for (i=0;i<=n;i++){
numbers[i]=i+2;
}
/*sieve the non-primes*/
for (i=0;i<=n;i++){
if (numbers[i]!=-1){
for (j=2*numbers[i]-2;j<n;j+=numbers[i])
numbers[j]=-1;
}
}
/*transfer the primes to their own array*/
j = 0;
for (i=0;i<=n&&j<PRIMES;i++)
if (numbers[i]!=-1) {
primes[j++] = numbers[i];
count = count + 1; }
/*print*/
for (i=0;i<count;i++)
printf("%d\n",primes[i]);
return 0;
}
Willkommen bei Stack-Überlauf! Es klingt, als müssten Sie lernen, wie Sie einen [Debugger] (https://en.wikipedia.org/wiki/Debugger) verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: [Wie kleine Programme zu debuggen] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –
Es hat Bias ('Zahlen [i] = i + 2;'). – BLUEPIXY