只需注意到质数肯定不是偶数,能节约枚举数目.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
int
isprime(int n)
{
int i;
if(n == 2)
return 1;
if(n%2 == 0)
return 0;
for(i=3; i*i <= n; i+=2)
if(n%i == 0)
return 0;
return 1;
}
void
sprime(int n, int ndigit)
{
if(ndigit == 0) {
printf( "%d\n", n);
return;
}
n *= 10;
if(isprime(n+1))
sprime(n+1, ndigit-1);
if(isprime(n+3))
sprime(n+3, ndigit-1);
if(isprime(n+7))
sprime(n+7, ndigit-1);
if(isprime(n+9))
sprime(n+9, ndigit-1);
}
int main()
{
int n;
while(scanf("%d", &n)!=EOF){
sprime(2, n-1);
sprime(3, n-1);
sprime(5, n-1);
sprime(7, n-1);
}
return 0;
}