Chowla numbers: Difference between revisions
Content added Content deleted
Line 1,186: | Line 1,186: | ||
There are 5 perfect numbers <= 35,000,000 |
There are 5 perfect numbers <= 35,000,000 |
||
</pre> |
</pre> |
||
=={{header|Groovy}}== |
|||
{{trans|Kotlin}} |
|||
<lang groovy>class Chowla { |
|||
static int chowla(int n) { |
|||
if (n < 1) throw new RuntimeException("argument must be a positive integer") |
|||
int sum = 0 |
|||
int i = 2 |
|||
while (i * i <= n) { |
|||
if (n % i == 0) { |
|||
int j = (int) (n / i) |
|||
sum += (i == j) ? i : i + j |
|||
} |
|||
i++ |
|||
} |
|||
return sum |
|||
} |
|||
static boolean[] sieve(int limit) { |
|||
// True denotes composite, false denotes prime. |
|||
// Only interested in odd numbers >= 3 |
|||
boolean[] c = new boolean[limit] |
|||
for (int i = 3; i < limit / 3; i += 2) { |
|||
if (!c[i] && chowla(i) == 0) { |
|||
for (int j = 3 * i; j < limit; j += 2 * i) { |
|||
c[j] = true |
|||
} |
|||
} |
|||
} |
|||
return c |
|||
} |
|||
static void main(String[] args) { |
|||
for (int i = 1; i <= 37; i++) { |
|||
printf("chowla(%2d) = %d\n", i, chowla(i)) |
|||
} |
|||
println() |
|||
int count = 1 |
|||
int limit = 10_000_000 |
|||
boolean[] c = sieve(limit) |
|||
int power = 100 |
|||
for (int i = 3; i < limit; i += 2) { |
|||
if (!c[i]) { |
|||
count++ |
|||
} |
|||
if (i == power - 1) { |
|||
printf("Count of primes up to %,10d = %,7d\n", power, count) |
|||
power *= 10 |
|||
} |
|||
} |
|||
println() |
|||
count = 0 |
|||
limit = 35_000_000 |
|||
int i = 2 |
|||
while (true) { |
|||
int p = (1 << (i - 1)) * ((1 << i) - 1) // perfect numbers must be of this form |
|||
if (p > limit) break |
|||
if (chowla(p) == p - 1) { |
|||
printf("%,d is a perfect number\n", p) |
|||
count++ |
|||
} |
|||
i++ |
|||
} |
|||
printf("There are %,d perfect numbers <= %,d\n", count, limit) |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre>chowla( 1) = 0 |
|||
chowla( 2) = 0 |
|||
chowla( 3) = 0 |
|||
chowla( 4) = 2 |
|||
chowla( 5) = 0 |
|||
chowla( 6) = 5 |
|||
chowla( 7) = 0 |
|||
chowla( 8) = 6 |
|||
chowla( 9) = 3 |
|||
chowla(10) = 7 |
|||
chowla(11) = 0 |
|||
chowla(12) = 15 |
|||
chowla(13) = 0 |
|||
chowla(14) = 9 |
|||
chowla(15) = 8 |
|||
chowla(16) = 14 |
|||
chowla(17) = 0 |
|||
chowla(18) = 20 |
|||
chowla(19) = 0 |
|||
chowla(20) = 21 |
|||
chowla(21) = 10 |
|||
chowla(22) = 13 |
|||
chowla(23) = 0 |
|||
chowla(24) = 35 |
|||
chowla(25) = 5 |
|||
chowla(26) = 15 |
|||
chowla(27) = 12 |
|||
chowla(28) = 27 |
|||
chowla(29) = 0 |
|||
chowla(30) = 41 |
|||
chowla(31) = 0 |
|||
chowla(32) = 30 |
|||
chowla(33) = 14 |
|||
chowla(34) = 19 |
|||
chowla(35) = 12 |
|||
chowla(36) = 54 |
|||
chowla(37) = 0 |
|||
Count of primes up to 100 = 25 |
|||
Count of primes up to 1,000 = 168 |
|||
Count of primes up to 10,000 = 1,229 |
|||
Count of primes up to 100,000 = 9,592 |
|||
Count of primes up to 1,000,000 = 78,498 |
|||
Count of primes up to 10,000,000 = 664,579 |
|||
6 is a perfect number |
|||
28 is a perfect number |
|||
496 is a perfect number |
|||
8,128 is a perfect number |
|||
33,550,336 is a perfect number |
|||
There are 5 perfect numbers <= 35,000,000</pre> |
|||
=={{header|J}}== |
=={{header|J}}== |