Chowla numbers: Difference between revisions
Content added Content deleted
(add Java implementation) |
(define methods) |
||
Line 1,575: | Line 1,575: | ||
public static void main(String[] args) { |
public static void main(String[] args) { |
||
int |
int[] chowlaNumbers = findChowlaNumbers(37); |
||
for (int i = |
for (int i = 0; i < chowlaNumbers.length; i++) { |
||
System.out.printf("chowla(%d) = %d%n", i, |
System.out.printf("chowla(%d) = %d%n", (i+1), chowlaNumbers[i]); |
||
} |
} |
||
System.out.println(); |
System.out.println(); |
||
int |
int[][] primes = countPrimes(100, 10_000_000); |
||
for (int i = 0; i < primes.length; i++) { |
|||
⚫ | |||
⚫ | |||
⚫ | |||
System.out.println(); |
|||
int[] perfectNumbers = findPerfectNumbers(35_000_000); |
|||
for (int i = 0; i < perfectNumbers.length; i++) { |
|||
System.out.printf("%d is a perfect number%n", perfectNumbers[i]); |
|||
⚫ | |||
System.out.printf(Locale.US, "There are %d perfect numbers < %,d%n", perfectNumbers.length, 35_000_000); |
|||
} |
|||
public static int chowla(int n) { |
|||
if (n < 0) throw new IllegalArgumentException("n is not positive"); |
|||
⚫ | |||
for (int i = 2, j; i * i <= n; i++) |
|||
⚫ | |||
return sum; |
|||
} |
|||
protected static int[][] countPrimes(int power, int limit) { |
|||
int count = 0; |
|||
int[][] num = new int[countMultiplicity(limit, power)][2]; |
|||
⚫ | |||
if (chowla(n) == 0) count++; |
if (chowla(n) == 0) count++; |
||
if (n % power == 0) { |
if (n % power == 0) { |
||
num[i][0] = power; |
|||
num[i][1] = count; |
|||
i++; |
|||
power *= 10; |
power *= 10; |
||
} |
} |
||
} |
} |
||
return num; |
|||
} |
|||
protected static int countMultiplicity(int limit, int start) { |
|||
int count = 0; |
|||
int cur = limit; |
|||
while(cur >= start) { |
|||
count++; |
|||
cur = cur/10; |
|||
} |
|||
return count; |
|||
} |
|||
protected static int[] findChowlaNumbers(int limit) { |
|||
int[] num = new int[limit]; |
|||
for (int i = 0; i < limit; i++) { |
|||
num[i] = chowla(i+1); |
|||
} |
|||
return num; |
|||
} |
|||
protected static int[] findPerfectNumbers(int limit) { |
|||
int count = 0; |
|||
int[] num = new int[count]; |
|||
⚫ | |||
⚫ | |||
int k = 2, kk = 3, p; |
int k = 2, kk = 3, p; |
||
while ((p = k * kk) < limit) { |
while ((p = k * kk) < limit) { |
||
if (chowla(p) == p - 1) { |
if (chowla(p) == p - 1) { |
||
num = increaseArr(num); |
|||
count++; |
num[count++] = p; |
||
} |
} |
||
k = kk + 1; |
k = kk + 1; |
||
kk += k; |
kk += k; |
||
} |
} |
||
return num; |
|||
⚫ | |||
} |
} |
||
private static int[] increaseArr(int[] arr) { |
|||
int[] tmp = new int[arr.length + 1]; |
|||
System.arraycopy(arr, 0, tmp, 0, arr.length); |
|||
return tmp; |
|||
⚫ | |||
⚫ | |||
} |
} |
||
} |
} |