Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h> /* SPOJ PRIME1 -- tweaked from code by BLUEPIXY */
- #include <stdlib.h> /* at http://stackoverflow.com/a/18041372/849891 */
- int main(void){
- int k,m[10],n[10],prime[100001],i0,i,j,s,tmp,d;
- scanf("%d ",&k);
- if( k>10) {exit(1);} /* breach of contract */
- for(i=0;i<k;i++){
- scanf("%d %d",&m[i],&n[i]);
- if( n-m > 100000) {exit(2);}
- for(s=0;s<k;s++){
- if(3>m[s]){i0=3;} else {i0=m[s];}
- tmp = (i0&1) ? 1 : (++i0);
- for( i=i0;i<= n[s];i+=2){
- prime[ i-m[s] ] = 1; /* mark all odds as prime */
- }
- for(i=3, d=6; (j=i*i)<= n[s]; i+=2, d+=4){
- if( j < i0 ) {j += ((i0-j+d-1)/d) * d;}
- for( ; j<=n[s]; j+=d){
- prime[ j-m[s] ] = 0;} /* mark mults of odds as non-prime */
- }
- if(2 >= m[s]) {printf( "2\n");}
- for(i=i0;i<=n[s];i+=2){
- if(prime[i-m[s]]){
- printf("%d\n",i);}}
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment