素数

题目要求

输出 1000-9999 中满足以下条件的所有数:

  • 该数是素数.
  • 十位数和个位数组成的数是素数,百位数和个位数组成的数是素数.
  • 个位数和百位数组成的数是素数,个位数和十位数组成的数是素数. 比如 1991 ,个位和十位组成的数就是
    19 .

我的解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
int is_prime(int num);
int main()
{
int i;
for(i=1000; i<=9999; i++)
{
//选取个位,十位和百位
int b;
b=(i%1000)/100;
int s;
s=((i%1000)%100)/10;
int g;
g=((i%1000)%100)%10;

if(is_prime(i)&&is_prime(s*10+g) && is_prime(b*10+g) && is_prime(g*10+b) &&is_prime(g*10+s))
printf("%dn",i);
};
}

int is_prime(int num)
{
if (num < 2)
return 0;
for (int i = 2; i * i <= num; i++)
if (num % i == 0)
return 0;
return 1;
}

参考答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
int is_prime(int num)
{
if (num < 2)
return 0;
for (int i = 2; i * i <= num; i++)
if (num % i == 0)
return 0;
return 1;
}
int main(void)
{
for (int i = 1000; i <= 9999; i++)
{

int g = i % 10;
int s = (i / 10) % 10;
int b = (i / 100) % 10;

if (is_prime(i) &&
is_prime(i % 100) &&
is_prime(g * 10 + b) &&
is_prime(g * 10 + s) &&
is_prime(b * 10 + g))
printf("%d ", i);
}
}

运行结果