Chowla numbers: Difference between revisions

define methods
(add Java implementation)
(define methods)
Line 1,575:
 
public static void main(String[] args) {
int[] limitchowlaNumbers = findChowlaNumbers(37);
for (int i = 10; i <= limitchowlaNumbers.length; i++) {
System.out.printf("chowla(%d) = %d%n", (i+1), chowla(chowlaNumbers[i)]);
}
System.out.println();
 
int[][] n, countprimes = 0countPrimes(100, power = 10010_000_000);
limitfor (int i = 100000000; i < primes.length; i++) {
System.out.printf(Locale.US, "There areis %,d perfectprimes numbersup <to %,d%n", countprimes[i][1], limitprimes[i][0]);
for (n = 2; n <= limit; n++) {
count = 0;}
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]);
return sum;}
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");
limitint sum = 350000000;
for (int i = 2, j; i * i <= n; i++)
if (n % i == 0) sum += i + (i == (j = n / i) ? 0 : j);
return sum;
}
 
protected static int[][] countPrimes(int power, int limit) {
int count = 0;
int[][] num = new int[countMultiplicity(limit, power)][2];
for (int n = 2, i=0; n <= limit; n++) {
if (chowla(n) == 0) count++;
if (n % power == 0) {
System.out.printf(Locale.US,num[i][0] "There is %,d primes up to %,d%n", count,= power);
num[i][1] = count;
i++;
power *= 10;
}
}
System.out.println()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];
 
count = 0;
limit = 35000000;
int k = 2, kk = 3, p;
while ((p = k * kk) < limit) {
if (chowla(p) == p - 1) {
System.out.printf("%dnum is= a perfect number%n", pincreaseArr(num);
num[count++] = p;
}
k = kk + 1;
kk += k;
}
return num;
System.out.printf(Locale.US, "There are %d perfect numbers < %,d%n", count, limit);
}
 
publicprivate static int[] chowlaincreaseArr(int[] narr) {
ifint[] (ntmp < 0) throw= new IllegalArgumentException("n isint[arr.length not+ positive")1];
intSystem.arraycopy(arr, sum0, =tmp, 0, arr.length);
forreturn (int i = 2, jtmp; i * i <= n; i++)
if (n % i == 0) sum += i + (i == (j = n / i) ? 0 : j);
return sum;
}
}
4

edits