luogu P1217 回文质数 枚举

枚举出所有的的回文数,然后判断其是否在范围内,是否是素数即可。

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <algorithm>
 4 using namespace std;
 5 int a,b,tot;
 6 int res[501000];
 7 bool ok(int x)
 8 {
 9     if (x < a || x > b)
10         return false;
11     int t = sqrt(x);
12     for (int i = 2;i <= t;i++)
13         if (x % i == 0)
14             return false;
15     return true;
16 }
17 int main()
18 {
19     scanf("%d%d",&a,&b);
20     //长度为9回文数 
21     for (int d1 = 1;d1 <= 9;d1 += 2)
22         for (int  d2 = 0;d2 <= 9;d2++)
23             for (int d3 = 0;d3 <= 9;d3++)
24                 for (int d4 = 0;d4 <= 9;d4++)
25                     for (int d5 = 0;d5 <= 9;d5++)
26                     {
27                         int t = d1 * 100000000 + d2 * 10000000 + d3 * 1000000 + d4 * 100000 + d5 * 10000 + d4 * 1000 + d3 * 100 + d2 * 10 + d1;
28                         if (ok(t))
29                             res[++tot] = t; 
30                     }
31     //长度为8的回文数
32      for (int d1 = 1;d1 <= 9;d1 += 2)
33         for (int  d2 = 0;d2 <= 9;d2++)
34             for (int d3 = 0;d3 <= 9;d3++)
35                 for (int d4 = 0;d4 <= 9;d4++)
36                     {
37                         int t = d1 * 10000000 + d2 * 1000000 + d3 * 100000 + d4 * 10000 + d4 * 1000 + d3 * 100 + d2 * 10 + d1;
38                         if (ok(t))
39                             res[++tot] = t; 
40                     }
41     //长度为7的回文数 
42     for (int d1 = 1;d1 <= 9;d1 += 2)
43         for (int  d2 = 0;d2 <= 9;d2++)
44             for (int d3 = 0;d3 <= 9;d3++)
45                 for (int d4 = 0;d4 <= 9;d4++)
46                     {
47                         int t = d1 * 1000000 + d2 * 100000 + d3 * 10000 + d4 * 1000 + d3 * 100 + d2 * 10 + d1;
48                         if (ok(t))
49                             res[++tot] = t; 
50                     }
51     //长度为6的回文数 
52     for (int d1 = 1;d1 <= 9;d1 += 2)
53         for (int  d2 = 0;d2 <= 9;d2++)
54             for (int d3 = 0;d3 <= 9;d3++)
55                 {
56                     int t = d1 * 100000 + d2 * 10000 + d3 * 1000 + d3 * 100 + d2 * 10 + d1;
57                     if (ok(t))
58                         res[++tot] = t; 
59                 }
60     //长度为5的回文数 
61     for (int d1 = 1;d1 <= 9;d1 += 2)
62         for (int  d2 = 0;d2 <= 9;d2++)
63             for (int d3 = 0;d3 <= 9;d3++)
64                 {
65                     int t = d1 * 10000 + d2 * 1000 + d3 * 100 + d2 * 10 + d1;
66                     if (ok(t))
67                         res[++tot] = t; 
68                 }
69     //长度为4的回文数 
70     for (int d1 = 1;d1 <= 9;d1 += 2)
71         for (int  d2 = 0;d2 <= 9;d2++)
72             {
73                 int t = d1 * 1000 + d2 * 100 + d2 * 10 + d1;
74                 if (ok(t))
75                     res[++tot] = t; 
76             }
77     //长度为3的回文数 
78     for (int d1 = 1;d1 <= 9;d1 += 2)
79         for (int  d2 = 0;d2 <= 9;d2++)
80             {
81                 int t = d1 * 100 + d2 * 10 + d1;
82                 if (ok(t))
83                     res[++tot] = t; 
84             }
85     //长度为2的回文数 
86     for (int d1 = 1;d1 <= 9;d1 += 2)
87         if (ok(d1 * 10 + d1))
88             res[++tot] = d1 * 10 + d1;
89     //长度为1的回文数 
90     for (int d1 = 1;d1 <= 9;d1 += 2)
91         if (ok(d1))
92             res[++tot] = d1;
93     sort(res + 1,res + tot + 1);
94     for (int i = 1;i <= tot;i++)
95         printf("%d\n",res[i]);
96     return 0;
97 }

 

转载于:https://www.cnblogs.com/iat14/p/11180973.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值