#include <stdio.h>
#include <math.h>
#define UPPER_LIMIT 2147483647
void sieve(unsigned long int n, unsigned long int primes[]);
main()
{
unsigned long int low, up, steps;
unsigned long int v[UPPER_LIMIT];
sieve(UPPER_LIMIT, v);
scanf("%ld\n",&steps);
for (unsigned long int i=0;i<steps;i++){
scanf("%ld %ld\n",&low,&up);
for(unsigned long int j=low; j<up; j++){
if (v[j] == 1){
printf("%ld\n",j);
}
}
}
}
void sieve(unsigned long int n, unsigned long int primes[])
{
for (unsigned long int i=0;i<n;i++){
primes[i]=1;
}
primes[0]=0,primes[1]=0;
for (unsigned long int i=2;i<sqrt(n);i++) {
for (unsigned long int j=i*i;j<n;j+=i){
primes[j] = 0;
}
}
}
Ich versuche, das Problem zu lösen, Primzahlen aus einem bestimmten Bereich zu drucken. Zuerst erhalten wir scanf
Anzahl der Fälle überprüft werden. Der Bereich wird durch die nächsten Zeilen von stdin angegeben, z. B. (1 10) der obere Wert kann maximal 2147483647 sein. Ich benutze Sieb aus Erastostens, um Primzahlen zu finden. Danach möchte ich printf
Primzahlen in aufsteigender Reihenfolge. Leider bekomme ich einen Runtime Error, und ich nehme an, das liegt an dem sehr großen Array, das ich erstellen möchte. Ich brauche einen Rat zur möglichen Lösung des Problems.C - Primzahlen von bestimmten BIG RANGE erhalten
Beispiel von stdin:
1
1 10
Beispiel stdout:
2
3
7
'unsigned long int v [UPPER_LIMIT];' ist wahrscheinlich zu groß. Versuchen Sie, mit 'malloc' zu erstellen. –
Seit wann war 5 keine Primzahl zwischen 1 und 10? –