33 lines
1.2 KiB
C#
33 lines
1.2 KiB
C#
using System;
|
||
using static System.Console;
|
||
|
||
class Program {
|
||
|
||
const int mc = 103 * 1000 * 10000 + 11 * 9 + 1;
|
||
|
||
static bool[] sv = new bool[mc + 1];
|
||
|
||
static void sieve() { int[] dS = new int[10000];
|
||
for (int a = 9, i = 9999; a >= 0; a--)
|
||
for (int b = 9; b >= 0; b--)
|
||
for (int c = 9, s = a + b; c >= 0; c--)
|
||
for (int d = 9, t = s + c; d >= 0; d--)
|
||
dS[i--] = t + d;
|
||
for (int a = 0, n = 0; a < 103; a++)
|
||
for (int b = 0, d = dS[a]; b < 1000; b++, n += 10000)
|
||
for (int c = 0, s = d + dS[b] + n; c < 10000; c++)
|
||
sv[dS[c] + s++] = true; }
|
||
|
||
static void Main() { DateTime st = DateTime.Now; sieve();
|
||
WriteLine("Sieving took {0}s", (DateTime.Now - st).TotalSeconds);
|
||
WriteLine("\nThe first 50 self numbers are:");
|
||
for (int i = 0, count = 0; count <= 50; i++) if (!sv[i]) {
|
||
count++; if (count <= 50) Write("{0} ", i);
|
||
else WriteLine("\n\n Index Self number"); }
|
||
for (int i = 0, limit = 1, count = 0; i < mc; i++)
|
||
if (!sv[i]) if (++count == limit) {
|
||
WriteLine("{0,12:n0} {1,13:n0}", count, i);
|
||
if (limit == 1e9) break; limit *= 10; }
|
||
WriteLine("\nOverall took {0}s", (DateTime.Now - st). TotalSeconds);
|
||
}
|
||
}
|