- #include<stdio.h>
-
- void sieve(int L,int U) {
- int i,j,d;
- d=U-L+1;
- char flag[d];
- for (i=0;i<d;i++) flag[i]=1; /* par défaut tout est marqué comme premier */
- for (i=(L%2!=0);i<d;i+=2) flag[i]=0;
- /*on élimine les multiples des nombres premiers de 3 jusqua sqrt(U) */
- for (i=3;i*i<=U;i+=2) {
- if (i>L && !flag[i-L])
- continue;
- /* On choisit le facteur qu'on va éliminer ses multiples */
- j=L/i*i;
- if (j<L) j+=i;
- if (j==i) j+=i; /* il faut que j soit différent de i */
- j-=L; /* On décale les indices */
- for (;j<d;j+=i) flag[j]=0;
- }
- if (L<=1) flag[1-L]=0;
- if (L<=2) flag[2-L]=1;
- for (i=0;i<d;i++)
- if (flag[i])
- printf("%d\n",L+i);
-
- }
- int main(){
- int m,n;
- while(scanf("%d%d",&m,&n) == 2){
- sieve(m,n);
- printf("\n");
- }
- return 0;
- }
#include<stdio.h>
void sieve(int L,int U) {
int i,j,d;
d=U-L+1;
char flag[d];
for (i=0;i<d;i++) flag[i]=1; /* par défaut tout est marqué comme premier */
for (i=(L%2!=0);i<d;i+=2) flag[i]=0;
/*on élimine les multiples des nombres premiers de 3 jusqua sqrt(U) */
for (i=3;i*i<=U;i+=2) {
if (i>L && !flag[i-L])
continue;
/* On choisit le facteur qu'on va éliminer ses multiples */
j=L/i*i;
if (j<L) j+=i;
if (j==i) j+=i; /* il faut que j soit différent de i */
j-=L; /* On décale les indices */
for (;j<d;j+=i) flag[j]=0;
}
if (L<=1) flag[1-L]=0;
if (L<=2) flag[2-L]=1;
for (i=0;i<d;i++)
if (flag[i])
printf("%d\n",L+i);
}
int main(){
int m,n;
while(scanf("%d%d",&m,&n) == 2){
sieve(m,n);
printf("\n");
}
return 0;
}