/* submitted by sgula@bellatlantic.net.remove.invalid, with fixes */ //--- Improved JSH C++ prime counter with removal of all sqrt() calls #include /* for some reason this wasn't defined */ #define min(a,b) ((a) < (b) ? (a) : (b)) unsigned S2(unsigned x, unsigned yin); unsigned JSHpi2(unsigned xin, unsigned yin) { return (xin-S2(xin,yin)-1); } //Optionally, use a define instead of the above function to reduce function calls and stack //overhead //#define JSHpi2 (xin,yin) (xin-S2(xin,yin)-1) //use at the risk of losing type safety unsigned S2(unsigned x, unsigned yin) { unsigned sum=0, i, sum1, sum2; const unsigned dx=1; for(unsigned i=2; i*i<=yin; i++) { sum2 = ( JSHpi2(i,i) - JSHpi2(i-dx,i-dx)); if (sum2!=0){ int tmp = (i-dx)*(i-dx), tmp2=x/i; sum1 = ( JSHpi2(x/i,min(tmp,tmp2)) - JSHpi2(i-dx,i-dx)) ; sum+=(sum1 * sum2); } } return sum; } unsigned long long pi(unsigned long long x) { return (unsigned long long) JSHpi2(x, x); }