/* factor.c -- Compute T(s) from Project Euler Problem 256 Written November 3, 2019 by Eric Olson Factor s to save memory at the expense of runtime. */ #include #include #include #include #define sMax 100000000 #define pNum 1300 #define fNum 13 int *P,pN; int isprime(int p){ for(int i=0;i1){ r.p[r.fN]=s; r.n[r.fN]=1; r.fN++; } return r; } int tfree(int k,int l){ int n=l/k; int lmin=(k+1)*n+2; int lmax=(k-1)*(n+1)-2; return lmin<=l && l<=lmax; } int T(int s){ if(s&1) return 0; int sqrts=sqrt(s)+0.5; factors f=factor(s); int z[fNum]; bzero(z,fNum*sizeof(int)); int r=0; for(;;){ z[0]++; for(int i=0;if.n[i]){ z[i]=0; z[i+1]++; } } if(z[f.fN]) break; int k=1; for(int i=0;i