Last active
June 30, 2019 02:29
-
-
Save MagallanesFito/bc5d694a6927e6447018f6854019ed1d to your computer and use it in GitHub Desktop.
Solution to Waiter Discussions https://www.hackerrank.com/challenges/waiter/problem
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static int[] firstQPrimes(int q) { | |
/* | |
* Write your code here. | |
*/ | |
// Generar primeros q numeros primos con la criba de atkin | |
//hay 1229 numeros primos entre 1 y 10000 | |
int limit = q; | |
boolean sieve[] = new boolean[limit]; | |
if(limit > 2) sieve[2] = true; | |
if(limit > 3) sieve[3] = true; | |
for(int x=1;x*x<limit;x++){ | |
for(int y=1;y*y<limit;y++){ | |
int n = (4*x*x) + (y*y); | |
if(n<= limit && (n%12 == 1 || n%12 == 5)){ | |
sieve[n] ^= true; | |
} | |
n = (3*x*x) + (y*y); | |
if(n<=limit && n%12 == 7){ | |
sieve[n] ^= true; | |
} | |
n = (3*x*x) - (y*y); | |
if(x > y && n<=limit && n%12 == 11){ | |
sieve[n] ^= true; | |
} | |
} | |
} | |
for(int r = 5;r*r < limit;r++){ | |
if(sieve[r]){ | |
for(int i=r*r;i<limit;i+=r*r){ | |
sieve[i] = false; | |
} | |
} | |
} | |
int l = 1208; | |
int [] primes = new int[l]; | |
int top = 0; | |
for(int i=0;i<sieve.length;i++){ | |
if(sieve[i]){ | |
primes[top++] = i; | |
} | |
} | |
return primes; | |
} | |
static int[] waiter(int [] number,int q) { | |
//Genera primeros 1200 primos | |
int [] primes = firstQPrimes(9800); | |
int [] finale = new int[number.length]; | |
int top = 0; | |
boolean orden = true; | |
for(int i=0;i<q;i++){ | |
if(orden){ | |
for(int j=0;j<number.length;j++){ | |
if(number[j]%primes[i] == 0){ | |
finale[top++] = number[j]; | |
//System.out.println(number[j]); | |
number[j] = -1; | |
} | |
} | |
} | |
else{ | |
for(int j=number.length-1;j>=0;j--){ | |
if(number[j]%primes[i] == 0){ | |
finale[top++] = number[j]; | |
//System.out.println(number[j]); | |
number[j] = -1; | |
} | |
} | |
} | |
orden ^= true; | |
} | |
orden ^= true; | |
if(orden){ | |
for(int j=0;j<number.length;j++){ | |
if(number[j] != -1){ | |
finale[top++] = number[j]; | |
//System.out.println(number[j]); | |
} | |
} | |
} | |
else{ | |
for(int j=number.length-1;j>=0;j--){ | |
if(number[j] != -1){ | |
finale[top++] = number[j]; | |
//System.out.println(number[j]); | |
} | |
} | |
} | |
//number es A_0 | |
return finale; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment