Truncatable primes: Difference between revisions
Content deleted Content added
Added C code |
|||
Line 82: | Line 82: | ||
Largest RTP from 1..1000000: 739399 |
Largest RTP from 1..1000000: 739399 |
||
</pre> |
</pre> |
||
=={{header|C}}== |
|||
<lang C>#include<stdio.h> |
|||
#include<string.h> |
|||
#include<stdlib.h> |
|||
#include<math.h> |
|||
int isprime(int n){ |
|||
int isprm[]={0,0,1,1,0,1,0,1,0,0}; |
|||
int a=7,h; |
|||
if(n<10)return isprm[n]; |
|||
if(!(n&1)||!(n%3))return 0; |
|||
h=sqrt(n)+3; |
|||
while(a<h){ |
|||
if(!(n%a)||!(n%(a-2)))return 0; |
|||
a+=6; |
|||
} |
|||
return 1; |
|||
} |
|||
void leftTrunc(char*s,int l){ |
|||
memmove(s,s+1,l); |
|||
} |
|||
void rightTrunc(char*s,int l){ |
|||
s[l-1]=0; |
|||
} |
|||
int isTruncPrime(int n,void(*func)(char*,int)){ |
|||
char s[32]; |
|||
while(isprime(n)){ |
|||
ltoa(n,s,10); |
|||
if(strchr(s,'0'))break; |
|||
func(s,strlen(s)); |
|||
if(!(n=atol(s)))return 1; |
|||
} |
|||
return 0; |
|||
} |
|||
void getHiTruncPrime(int n,void(*func)(char*,int)){ |
|||
while(n--){ |
|||
if(isTruncPrime(n,func)){ |
|||
printf("%d\n",n); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
int main(){ |
|||
puts("Highest left- and right-truncatable primes under 1e6:"); |
|||
getHiTruncPrime(1000000,leftTrunc); |
|||
getHiTruncPrime(1000000,rightTrunc); |
|||
puts("Press Enter"); |
|||
getchar(); |
|||
return 0; |
|||
}</lang> |
|||
Output: |
|||
<pre>Highest left- and right-truncatable primes under 1e6: |
|||
998443 |
|||
739399 |
|||
Press Enter</pre> |
|||
=={{header|D}}== |
=={{header|D}}== |
||
<lang d>import std.stdio, std.math, std.string, std.conv; |
<lang d>import std.stdio, std.math, std.string, std.conv; |