Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
104
Task/Strong-and-weak-primes/Java/strong-and-weak-primes.java
Normal file
104
Task/Strong-and-weak-primes/Java/strong-and-weak-primes.java
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
public class StrongAndWeakPrimes {
|
||||
|
||||
private static int MAX = 10_000_000 + 1000;
|
||||
private static boolean[] primes = new boolean[MAX];
|
||||
|
||||
public static void main(String[] args) {
|
||||
sieve();
|
||||
System.out.println("First 36 strong primes:");
|
||||
displayStrongPrimes(36);
|
||||
for ( int n : new int[] {1_000_000, 10_000_000}) {
|
||||
System.out.printf("Number of strong primes below %,d = %,d%n", n, strongPrimesBelow(n));
|
||||
}
|
||||
System.out.println("First 37 weak primes:");
|
||||
displayWeakPrimes(37);
|
||||
for ( int n : new int[] {1_000_000, 10_000_000}) {
|
||||
System.out.printf("Number of weak primes below %,d = %,d%n", n, weakPrimesBelow(n));
|
||||
}
|
||||
}
|
||||
|
||||
private static int weakPrimesBelow(int maxPrime) {
|
||||
int priorPrime = 2;
|
||||
int currentPrime = 3;
|
||||
int count = 0;
|
||||
while ( currentPrime < maxPrime ) {
|
||||
int nextPrime = getNextPrime(currentPrime);
|
||||
if ( currentPrime * 2 < priorPrime + nextPrime ) {
|
||||
count++;
|
||||
}
|
||||
priorPrime = currentPrime;
|
||||
currentPrime = nextPrime;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
private static void displayWeakPrimes(int maxCount) {
|
||||
int priorPrime = 2;
|
||||
int currentPrime = 3;
|
||||
int count = 0;
|
||||
while ( count < maxCount ) {
|
||||
int nextPrime = getNextPrime(currentPrime);
|
||||
if ( currentPrime * 2 < priorPrime + nextPrime) {
|
||||
count++;
|
||||
System.out.printf("%d ", currentPrime);
|
||||
}
|
||||
priorPrime = currentPrime;
|
||||
currentPrime = nextPrime;
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
private static int getNextPrime(int currentPrime) {
|
||||
int nextPrime = currentPrime + 2;
|
||||
while ( ! primes[nextPrime] ) {
|
||||
nextPrime += 2;
|
||||
}
|
||||
return nextPrime;
|
||||
}
|
||||
|
||||
private static int strongPrimesBelow(int maxPrime) {
|
||||
int priorPrime = 2;
|
||||
int currentPrime = 3;
|
||||
int count = 0;
|
||||
while ( currentPrime < maxPrime ) {
|
||||
int nextPrime = getNextPrime(currentPrime);
|
||||
if ( currentPrime * 2 > priorPrime + nextPrime ) {
|
||||
count++;
|
||||
}
|
||||
priorPrime = currentPrime;
|
||||
currentPrime = nextPrime;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
private static void displayStrongPrimes(int maxCount) {
|
||||
int priorPrime = 2;
|
||||
int currentPrime = 3;
|
||||
int count = 0;
|
||||
while ( count < maxCount ) {
|
||||
int nextPrime = getNextPrime(currentPrime);
|
||||
if ( currentPrime * 2 > priorPrime + nextPrime) {
|
||||
count++;
|
||||
System.out.printf("%d ", currentPrime);
|
||||
}
|
||||
priorPrime = currentPrime;
|
||||
currentPrime = nextPrime;
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
private static final void sieve() {
|
||||
// primes
|
||||
for ( int i = 2 ; i < MAX ; i++ ) {
|
||||
primes[i] = true;
|
||||
}
|
||||
for ( int i = 2 ; i < MAX ; i++ ) {
|
||||
if ( primes[i] ) {
|
||||
for ( int j = 2*i ; j < MAX ; j += i ) {
|
||||
primes[j] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue