Data update
This commit is contained in:
parent
ed705008a8
commit
0df55f9f24
2196 changed files with 32999 additions and 3075 deletions
88
Task/Blum-integer/C-sharp/blum-integer.cs
Normal file
88
Task/Blum-integer/C-sharp/blum-integer.cs
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class BlumInteger
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
int[] blums = new int[50];
|
||||
int blumCount = 0;
|
||||
Dictionary<int, int> lastDigitCounts = new Dictionary<int, int>();
|
||||
int number = 1;
|
||||
|
||||
while (blumCount < 400000)
|
||||
{
|
||||
int prime = LeastPrimeFactor(number);
|
||||
if (prime % 4 == 3)
|
||||
{
|
||||
int quotient = number / prime;
|
||||
if (quotient != prime && IsPrimeType3(quotient))
|
||||
{
|
||||
if (blumCount < 50)
|
||||
{
|
||||
blums[blumCount] = number;
|
||||
}
|
||||
|
||||
if (!lastDigitCounts.ContainsKey(number % 10))
|
||||
{
|
||||
lastDigitCounts[number % 10] = 0;
|
||||
}
|
||||
lastDigitCounts[number % 10]++;
|
||||
|
||||
blumCount++;
|
||||
if (blumCount == 50)
|
||||
{
|
||||
Console.WriteLine("The first 50 Blum integers:");
|
||||
for (int i = 0; i < 50; i++)
|
||||
{
|
||||
Console.Write($"{blums[i],3}");
|
||||
Console.Write((i % 10 == 9) ? Environment.NewLine : " ");
|
||||
}
|
||||
Console.WriteLine();
|
||||
}
|
||||
else if (blumCount == 26828 || blumCount % 100000 == 0)
|
||||
{
|
||||
Console.WriteLine($"The {blumCount}th Blum integer is: {number}");
|
||||
if (blumCount == 400000)
|
||||
{
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Percent distribution of the first 400000 Blum integers:");
|
||||
foreach (var key in lastDigitCounts.Keys)
|
||||
{
|
||||
Console.WriteLine($" {((double)lastDigitCounts[key] / 4000):0.000}% end in {key}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
number += (number % 5 == 3) ? 4 : 2;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsPrimeType3(int number)
|
||||
{
|
||||
if (number < 2) return false;
|
||||
if (number % 2 == 0) return number == 2;
|
||||
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;
|
||||
}
|
||||
|
||||
private static int LeastPrimeFactor(int number)
|
||||
{
|
||||
if (number == 1) return 1;
|
||||
if (number % 2 == 0) return 2;
|
||||
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;
|
||||
}
|
||||
}
|
||||
62
Task/Blum-integer/Scala/blum-integer.scala
Normal file
62
Task/Blum-integer/Scala/blum-integer.scala
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
import scala.collection.mutable
|
||||
|
||||
object BlumInteger extends App {
|
||||
var blums = new Array[Int](50)
|
||||
var blumCount = 0
|
||||
val lastDigitCounts = mutable.Map[Int, Int]()
|
||||
var number = 1
|
||||
|
||||
while (blumCount < 400_000) {
|
||||
val prime = leastPrimeFactor(number)
|
||||
if (prime % 4 == 3) {
|
||||
val quotient = number / prime
|
||||
if (quotient != prime && isPrimeType3(quotient)) {
|
||||
if (blumCount < 50) {
|
||||
blums(blumCount) = number
|
||||
}
|
||||
lastDigitCounts(number % 10) = lastDigitCounts.getOrElse(number % 10, 0) + 1
|
||||
blumCount += 1
|
||||
if (blumCount == 50) {
|
||||
println("The first 50 Blum integers:")
|
||||
blums.grouped(10).foreach(group => println(group.map(i => f"$i%3d").mkString(" ")))
|
||||
println("")
|
||||
} else if (blumCount == 26828 || blumCount % 100_000 == 0) {
|
||||
println(f"The ${blumCount}th Blum integer is: $number%7d")
|
||||
if (blumCount == 400_000) {
|
||||
println("\nPercent distribution of the first 400000 Blum integers:")
|
||||
lastDigitCounts.foreach { case (key, count) =>
|
||||
println(f" ${count.toDouble / 4000}%6.3f%% end in $key")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
number += (if (number % 5 == 3) 4 else 2)
|
||||
}
|
||||
|
||||
def isPrimeType3(aNumber: Int): Boolean = {
|
||||
if (aNumber < 2) return false
|
||||
if (aNumber % 2 == 0) return aNumber == 2
|
||||
if (aNumber % 3 == 0) return aNumber == 3
|
||||
|
||||
var divisor = 5
|
||||
while (divisor * divisor <= aNumber) {
|
||||
if (aNumber % divisor == 0) return false
|
||||
divisor += 2
|
||||
}
|
||||
aNumber % 4 == 3
|
||||
}
|
||||
|
||||
def leastPrimeFactor(aNumber: Int): Int = {
|
||||
if (aNumber == 1) return 1
|
||||
if (aNumber % 2 == 0) return 2
|
||||
if (aNumber % 3 == 0) return 3
|
||||
|
||||
var divisor = 5
|
||||
while (divisor * divisor <= aNumber) {
|
||||
if (aNumber % divisor == 0) return divisor
|
||||
divisor += 2
|
||||
}
|
||||
aNumber
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue