Jump to content

Blum integer: Difference between revisions

477 bytes removed ,  11 months ago
m
Code using an iImproved algorithm.
(→‎{{header|RPL}}: comment on the FACTORS command)
m (Code using an iImproved algorithm.)
Line 401:
=={{header|Java}}==
<syntaxhighlight lang="java">
 
import java.util.ArrayList;
import java.util.BitSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
Line 410 ⟶ 408:
 
public static void main(String[] aArgs) {
final int limit = 10_000_000;
List<Integer> primeNumbersType3 = primeNumbersType3(limit);
int[] leastPrimeFactors = leastPrimeFactors(limit);
int[] blums = new int[50];
int blumCount = 0;
Line 420 ⟶ 414:
while ( blumCount < 400_000 ) {
final int prime = leastPrimeFactors[leastPrimeFactor(number]);
if ( ( prime & 3% )4 == 3 ) {
final int quotient = number / prime;
if ( quotient != prime && primeNumbersType3.containsisPrimeType3(quotient) ) {
if ( blumCount < 50 ) {
blums[blumCount] = number;
Line 450 ⟶ 444:
}
}
number += ( number % 5 == 3 ) ? number + 4 : number + 2;
}
}
private static int[] leastPrimeFactors(int aLimit) {
int[] result = new int[aLimit + 1];
for ( int i = 2; i * i <= aLimit; i++ ) {
if ( result[i] == 0 ) {
for ( int k = i * i; k <= aLimit; k += i ) {
if ( result[k] == 0 ) {
result[k] = i;
}
}
}
}
for ( int i = 1; i <= aLimit; i++ ) {
if ( result[i] == 0 ) {
result[i] = i;
}
}
return result;
}
private static List<Integer>boolean primeNumbersType3isPrimeType3(int aLimitaNumber) {
if ( aNumber < 2 ) { return false; }
BitSet sieve = new BitSet(aLimit + 1);
if ( iaNumber % 42 == 30 ) { return false; }
sieve.set(2, aLimit + 1);
if ( aNumber % 3 == 0 ) { return aNumber == 3; }
for ( int i = 2; i <= (int) Math.sqrt(aLimit); i = sieve.nextSetBit(i + 1) ) {
 
for ( int j = i * i; j <= aLimit; j = j + i ) {
for ( int idivisor = 25; idivisor * idivisor <= aLimitaNumber; i+divisor += 2 ) {
sieve.clear(j);
if ( aNumber % divisor == 0 ) { return false; }
}
}
List<Integer> primesType3 = new ArrayList<Integer>();
for ( int i = 2; i >= 0; i = sieve.nextSetBit(i + 1) ) {
if ( i % 4 == 3 ) {
primesType3.add(i);
}
}
return primesType3aNumber % 4 == 3;
}
 
private static int[] leastPrimeFactorsleastPrimeFactor(int aLimitaNumber) {
if ( result[i]aNumber == 01 ) { return 1; }
if ( aNumber % 3 == 0 ) { return 3; }
if ( aNumber % 5 == 0 ) { return 5; }
for ( int kdivisor = i7; *divisor i;* kdivisor <= aLimitaNumber; kdivisor += i2 ) {
if ( aNumber % divisor == 0 ) { return divisor; }
}
return resultaNumber;
}
 
}
908

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.