Data Update
This commit is contained in:
parent
015c2add84
commit
e50b5c3114
206 changed files with 6337 additions and 523 deletions
68
Task/Blum-integer/C++/blum-integer.cpp
Normal file
68
Task/Blum-integer/C++/blum-integer.cpp
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
bool is_prime_type_3(const int32_t number) {
|
||||
if ( number < 2 ) return false;
|
||||
if ( number % 2 == 0 ) return false;
|
||||
if ( number % 3 == 0 ) return number == 3;
|
||||
|
||||
for ( int divisor = 5; divisor * divisor <= number; divisor += 2 ) {
|
||||
if ( number % divisor == 0 ) { return false; }
|
||||
}
|
||||
|
||||
return number % 4 == 3;
|
||||
}
|
||||
|
||||
int32_t least_prime_factor(const int32_t number) {
|
||||
if ( number == 1 ) { return 1; }
|
||||
if ( number % 3 == 0 ) { return 3; }
|
||||
if ( number % 5 == 0 ) { return 5; }
|
||||
|
||||
for ( int divisor = 7; divisor * divisor <= number; divisor += 2 ) {
|
||||
if ( number % divisor == 0 ) { return divisor; }
|
||||
}
|
||||
|
||||
return number;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int32_t blums[50];
|
||||
int32_t blum_count = 0;
|
||||
int32_t last_digit_counts[10] = {};
|
||||
int32_t number = 1;
|
||||
|
||||
while ( blum_count < 400'000 ) {
|
||||
const int32_t prime = least_prime_factor(number);
|
||||
if ( prime % 4 == 3 ) {
|
||||
const int32_t quotient = number / prime;
|
||||
if ( quotient != prime && is_prime_type_3(quotient) ) {
|
||||
if ( blum_count < 50 ) {
|
||||
blums[blum_count] = number;
|
||||
}
|
||||
last_digit_counts[number % 10] += 1;
|
||||
blum_count += 1;
|
||||
if ( blum_count == 50 ) {
|
||||
std::cout << "The first 50 Blum integers:" << std::endl;
|
||||
for ( int32_t i = 0; i < 50; ++i ) {
|
||||
std::cout << std::setw(3) << blums[i] << ( ( i % 10 == 9 ) ? "\n" : " " );
|
||||
}
|
||||
std::cout << std::endl;
|
||||
} else if ( blum_count == 26'828 || blum_count % 100'000 == 0 ) {
|
||||
std::cout << "The " << std::setw(6) << blum_count << "th Blum integer is: "
|
||||
<< std::setw(7) << number << std::endl;
|
||||
if ( blum_count == 400'000 ) {
|
||||
std::cout << "\nPercent distribution of the first 400000 Blum integers:" << std::endl;
|
||||
for ( const int32_t& i : { 1, 3, 7, 9 } ) {
|
||||
std::cout << " " << std::setw(6) << std::setprecision(5)
|
||||
<< (double) last_digit_counts[i] / 4'000 << "% end in " << i << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
number += ( number % 5 == 3 ) ? 4 : 2;
|
||||
}
|
||||
}
|
||||
69
Task/Blum-integer/Java/blum-integer.java
Normal file
69
Task/Blum-integer/Java/blum-integer.java
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public final class BlumInteger {
|
||||
|
||||
public static void main(String[] aArgs) {
|
||||
int[] blums = new int[50];
|
||||
int blumCount = 0;
|
||||
Map<Integer, Integer> lastDigitCounts = new HashMap<Integer, Integer>();
|
||||
int number = 1;
|
||||
|
||||
while ( blumCount < 400_000 ) {
|
||||
final int prime = leastPrimeFactor(number);
|
||||
if ( prime % 4 == 3 ) {
|
||||
final int quotient = number / prime;
|
||||
if ( quotient != prime && isPrimeType3(quotient) ) {
|
||||
if ( blumCount < 50 ) {
|
||||
blums[blumCount] = number;
|
||||
}
|
||||
lastDigitCounts.merge(number % 10, 1, Integer::sum);
|
||||
blumCount += 1;
|
||||
if ( blumCount == 50 ) {
|
||||
System.out.println("The first 50 Blum integers:");
|
||||
for ( int i = 0; i < 50; i++ ) {
|
||||
System.out.print(String.format("%3d", blums[i]));
|
||||
System.out.print(( i % 10 == 9 ) ? System.lineSeparator() : " ");
|
||||
}
|
||||
System.out.println();
|
||||
} else if ( blumCount == 26_828 || blumCount % 100_000 == 0 ) {
|
||||
System.out.println(String.format("%s%6d%s%7d",
|
||||
"The ", blumCount, "th Blum integer is: ", number));
|
||||
if ( blumCount == 400_000 ) {
|
||||
System.out.println();
|
||||
System.out.println("Percent distribution of the first 400000 Blum integers:");
|
||||
for ( int key : lastDigitCounts.keySet() ) {
|
||||
System.out.println(String.format("%s%6.3f%s%d",
|
||||
" ", (double) lastDigitCounts.get(key) / 4_000, "% end in ", key));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
number += ( number % 5 == 3 ) ? 4 : 2;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isPrimeType3(int aNumber) {
|
||||
if ( aNumber < 2 ) { return false; }
|
||||
if ( aNumber % 2 == 0 ) { return false; }
|
||||
if ( aNumber % 3 == 0 ) { return aNumber == 3; }
|
||||
|
||||
for ( int divisor = 5; divisor * divisor <= aNumber; divisor += 2 ) {
|
||||
if ( aNumber % divisor == 0 ) { return false; }
|
||||
}
|
||||
return aNumber % 4 == 3;
|
||||
}
|
||||
|
||||
private static int leastPrimeFactor(int aNumber) {
|
||||
if ( aNumber == 1 ) { return 1; }
|
||||
if ( aNumber % 3 == 0 ) { return 3; }
|
||||
if ( aNumber % 5 == 0 ) { return 5; }
|
||||
|
||||
for ( int divisor = 7; divisor * divisor <= aNumber; divisor += 2 ) {
|
||||
if ( aNumber % divisor == 0 ) { return divisor; }
|
||||
}
|
||||
return aNumber;
|
||||
}
|
||||
|
||||
}
|
||||
15
Task/Blum-integer/Ruby/blum-integer.rb
Normal file
15
Task/Blum-integer/Ruby/blum-integer.rb
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
require 'prime'
|
||||
|
||||
BLUM_EXP = [1, 1]
|
||||
blums = (1..).step(2).lazy.select do |c|
|
||||
next if c % 5 == 0
|
||||
primes, exps = c.prime_division.transpose
|
||||
exps == BLUM_EXP && primes.all?{|pr| (pr-3) % 4 == 0}
|
||||
end
|
||||
|
||||
n, m = 50, 26828
|
||||
res = blums.first(m)
|
||||
puts "First #{n} Blum numbers:"
|
||||
res.first(n).each_slice(10){|s| puts "%4d"*s.size % s}
|
||||
|
||||
puts "\n#{m}th Blum number: #{res.last}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue