//WARNING: SLOWER THAN SIMPLE SIEVE IN PRACTICE!
/* Sieve of Eratosthenes marks some number "false" more than once
* For example, 45 is marked false when i=3 as well as when i=5
* With this sieve, we only mark each composite numbers false once
* Thus this is faster
* This is exactly 2*N. N numbers are being visited and N numbers are being marked exactly once
* Number of primes less than or equal to N is approx N/lnN
*/
import java.io.*;
import java.util.*;
class OrderN //SLOWER IN PRACTICE, but FASTER IN THEORY
{
{
int N;
long i,j,count=0;
System.
out.
println("Enter N"); N
=Integer.
parseInt(br.
readLine().
trim());
boolean isprime[]=new boolean[N+1];
int prime
[]=new int[N
/((int)Math.
log(N
)-1)]; //int SPF[]=new int[N+1]; //stores smallest prime factor of i
isprime[0]=false;
isprime[1]=false;
for(i=2;i<=N;i++)
{
if(isprime[(int)i]==true)
{
prime[(int)(count++)]=(int)i;
//SPF[(int)i]=(int)i;
}
for(j=0;j<count&&(i*prime[(int)j])<=N;j++)
{
isprime[(int)(i*prime[(int)j])]=false;
if(i%prime[(int)j]==0)
break;
}
}
double ans=((double)(end-start))/1000000000;
System.
out.
println("\nTime taken in seconds");
System.
out.
println("Prime numbers less than N :"); //for(i=0;i<count;i++)
//System.out.print(prime[(int)i]+" ");
}
}
Ly9XQVJOSU5HOiBTTE9XRVIgVEhBTiBTSU1QTEUgU0lFVkUgSU4gUFJBQ1RJQ0UhCgovKiBTaWV2ZSBvZiBFcmF0b3N0aGVuZXMgbWFya3Mgc29tZSBudW1iZXIgImZhbHNlIiBtb3JlIHRoYW4gb25jZQogKiBGb3IgZXhhbXBsZSwgNDUgaXMgbWFya2VkIGZhbHNlIHdoZW4gaT0zIGFzIHdlbGwgYXMgd2hlbiBpPTUKICogV2l0aCB0aGlzIHNpZXZlLCB3ZSBvbmx5IG1hcmsgZWFjaCBjb21wb3NpdGUgbnVtYmVycyBmYWxzZSBvbmNlCiAqIFRodXMgdGhpcyBpcyBmYXN0ZXIKICogVGhpcyBpcyBleGFjdGx5IDIqTi4gTiBudW1iZXJzIGFyZSBiZWluZyB2aXNpdGVkIGFuZCBOIG51bWJlcnMgYXJlIGJlaW5nIG1hcmtlZCBleGFjdGx5IG9uY2UKICogTnVtYmVyIG9mIHByaW1lcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTiBpcyBhcHByb3ggTi9sbk4KICovCmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuKjsKY2xhc3MgT3JkZXJOIC8vU0xPV0VSIElOIFBSQUNUSUNFLCBidXQgRkFTVEVSIElOIFRIRU9SWQp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgSU9FeGNlcHRpb24KICAgIHsKICAgICAgICBCdWZmZXJlZFJlYWRlciBicj1uZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOwogICAgICAgIAogICAgICAgIGludCBOOwogICAgICAgIGxvbmcgaSxqLGNvdW50PTA7CiAgICAgICAgCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciBOIik7CiAgICAgICAgTj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkudHJpbSgpKTsKICAgICAgICAKICAgICAgICBsb25nIHN0YXJ0PVN5c3RlbS5uYW5vVGltZSgpOwogICAgICAgIAogICAgICAgIGJvb2xlYW4gaXNwcmltZVtdPW5ldyBib29sZWFuW04rMV07CiAgICAgICAgaW50IHByaW1lW109bmV3IGludFtOLygoaW50KU1hdGgubG9nKE4pLTEpXTsKICAgICAgICAvL2ludCBTUEZbXT1uZXcgaW50W04rMV07IC8vc3RvcmVzIHNtYWxsZXN0IHByaW1lIGZhY3RvciBvZiBpCiAgICAgICAgCiAgICAgICAgQXJyYXlzLmZpbGwoaXNwcmltZSx0cnVlKTsKICAgICAgICAKICAgICAgICBpc3ByaW1lWzBdPWZhbHNlOwogICAgICAgIGlzcHJpbWVbMV09ZmFsc2U7CiAgICAgICAgCiAgICAgICAgZm9yKGk9MjtpPD1OO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKGlzcHJpbWVbKGludClpXT09dHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcHJpbWVbKGludCkoY291bnQrKyldPShpbnQpaTsKICAgICAgICAgICAgICAgIC8vU1BGWyhpbnQpaV09KGludClpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBmb3Ioaj0wO2o8Y291bnQmJihpKnByaW1lWyhpbnQpal0pPD1OO2orKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaXNwcmltZVsoaW50KShpKnByaW1lWyhpbnQpal0pXT1mYWxzZTsKICAgICAgICAgICAgICAgIGlmKGklcHJpbWVbKGludClqXT09MCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGxvbmcgZW5kPVN5c3RlbS5uYW5vVGltZSgpOwogICAgICAgIAogICAgICAgIGRvdWJsZSBhbnM9KChkb3VibGUpKGVuZC1zdGFydCkpLzEwMDAwMDAwMDA7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblRpbWUgdGFrZW4gaW4gc2Vjb25kcyIpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhbnMrIlxuIik7CiAgICAgICAgCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcmltZSBudW1iZXJzIGxlc3MgdGhhbiBOIDoiKTsKICAgICAgICAvL2ZvcihpPTA7aTxjb3VudDtpKyspCiAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50KHByaW1lWyhpbnQpaV0rIiAiKTsKICAgIH0KfQ==