Will_Ness

SPOJ PRIME1 - tweaked code by BLUEPIXY

Aug 4th, 2013
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.00 KB | None | 0 0
  1. #include <stdio.h>     /* SPOJ PRIME1 -- tweaked from code by BLUEPIXY  */
  2. #include <stdlib.h>    /* at http://stackoverflow.com/a/18041372/849891 */
  3.  
  4. int main(void){
  5.     int k,m[10],n[10],prime[100001],i0,i,j,s,tmp,d;
  6.     scanf("%d ",&k);
  7.     if( k>10) {exit(1);}  /* breach of contract */
  8.     for(i=0;i<k;i++){
  9.         scanf("%d %d",&m[i],&n[i]);
  10.         if( n-m > 100000) {exit(2);}
  11.     for(s=0;s<k;s++){
  12.         if(3>m[s]){i0=3;} else {i0=m[s];}
  13.         tmp = (i0&1) ? 1 : (++i0);
  14.         for( i=i0;i<= n[s];i+=2){
  15.             prime[ i-m[s] ] = 1; /* mark all odds as prime */
  16.         }
  17.         for(i=3, d=6; (j=i*i)<= n[s]; i+=2, d+=4){
  18.             if( j < i0 ) {j += ((i0-j+d-1)/d) * d;}
  19.             for( ; j<=n[s]; j+=d){
  20.                 prime[ j-m[s] ] = 0;} /* mark mults of odds as non-prime */
  21.         }
  22.         if(2 >= m[s]) {printf( "2\n");}
  23.         for(i=i0;i<=n[s];i+=2){
  24.             if(prime[i-m[s]]){
  25.                 printf("%d\n",i);}}
  26.         printf("\n");
  27.     }
  28.     return 0;
  29. }
Advertisement
Add Comment
Please, Sign In to add comment