洛谷P1218 [USACO1.5]特殊的质数肋骨 搜索

P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib
题意 找出所有 n 位的十进制数要求其每一个前缀均为质数
搜索
加两个剪枝 , 1、最高位有4种选择 ,可以选择 2 3 5 7
然后其他位只有 5 种选择 选 1 3 5 7 9
2、高位向低位枚举 这样 枚举的时候如果当前这个数已经不满足质数肋骨
那就直接 跳出,这是一个小优化 即一边做一边判断 是否为质数 这样就能剪掉很多

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <string>
 4 #include <cstdlib>
 5 #include <iomanip>
 6 #include <iostream>
 7 #include <algorithm>
 8 #include <string>
 9 using namespace std ;
10
11 int n ;
12 int a[6] ;
13
14 bool is_prime(int x)     //  是质数  返回  true
15 {
16     if(x<=1) return false ;
17     for(int i=2;i*i<=x;i++)
18         if(x%i==0) return false ;
19     return true ;
20 }
21
22 void dfs(int k,int sum )
23 {
24     int x ;
25     for(int i=1;i<=5;i++)
26     {
27         x = sum*10+a[i] ;
28         if(is_prime(x))
29         {
30             if(k==n) printf("%d\n",x) ;
31                 else dfs(k+1,x) ;
32         }
33
34     }
35
36 }
37
38 int main()
39 {
40     scanf("%d",&n) ;
41     a[ 1 ] = 1 ;
42     a[ 2 ] = 3 ;
43     a[ 3 ] = 5 ;
44     a[ 4 ] = 7 ;
45     a[ 5 ] = 9 ;
46     int x ;
47     for(int i = 1;i<=4;i++)
48     {
49         x = a[ i ] ;
50         if(i==1) x = 2 ;
51         dfs(2,x) ;
52     }
53
54     return 0 ;
55 }
时间: 2024-10-25 15:51:42

洛谷P1218 [USACO1.5]特殊的质数肋骨 搜索的相关文章

洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib

P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 284通过 425提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 超时怎么办? 题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们.农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数,举例来说: 7 3 3 1 全部肋骨上的数字 7331是质数;三根肋骨 733是质数;二

洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes

P1217 [USACO1.5]回文质数 Prime Palindromes 题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)( 一亿)间的所有回文质数; 输入输出格式 输入格式: 第 1 行: 二个整数 a 和 b . 输出格式: 输出一个回文质数的列表,一行一个. 输入输出样例 输入样例#1: 复制 5 500 输出样例#1: 复制 5 7

P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib (数论—素数 + DFS)

这大概是我写的第一个DFS 题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们.农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数,举例来说: 7 3 3 1 全部肋骨上的数字 7331是质数;三根肋骨 733是质数;二根肋骨 73 是质数;当然,最后一根肋骨 7 也是质数. 7331 被叫做长度 4 的特殊质数.写一个程序对给定的肋骨的数目 N (1<=N<=8),求出所有的特殊质数.

P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib

题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们.农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数,举例来说: 7 3 3 1 全部肋骨上的数字 7331是质数;三根肋骨 733是质数;二根肋骨 73 是质数;当然,最后一根肋骨 7 也是质数. 7331 被叫做长度 4 的特殊质数.写一个程序对给定的肋骨的数目 N (1<=N<=8),求出所有的特殊质数.数字1不被看作一个质数. 输

洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes【取回文数/数论/字符串】

题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)( 一亿)间的所有回文质数; 输入输出格式 输入格式: 第 1 行: 二个整数 a 和 b . 输出格式: 输出一个回文质数的列表,一行一个. 输入输出样例 输入样例#1: 复制 5 500 输出样例#1: 复制 5 7 11 101 131 151 181 191 313 353 373 383

洛谷 P1215 [USACO1.4]母亲的牛奶 Mother&#39;s Milk

题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了.当然每一次灌注都是完全的.由于节约,牛奶不会有丢失. 写一个程序去帮助农民找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性. 输入输出格式 输入格式: 单独的一行包括三个整数A,B和C. 输出格式: 只有一行,升序地列出当A桶是空的时候,C桶牛奶所剩量的所有可能性. 输入输出样例 输入样例#1:

洛谷P1214 [USACO1.4]等差数列 Arithmetic Progressions

P1214 [USACO1.4]等差数列 Arithmetic Progressions• o 156通过o 463提交• 题目提供者该用户不存在• 标签USACO• 难度普及+/提高 提交 讨论 题解 最新讨论• 这道题有问题• 怎么进一步优化时间效率啊 …题目描述一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列.在这个问题中a是一个非负的整数,b是正整数.写一个程序来找出在双平方数集合(双平方数集合是所有能表示成p的平方 + q的平

洛谷 P1203 [USACO1.1]坏掉的项链Broken Necklace

P1203 [USACO1.1]坏掉的项链Broken Necklace 题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A 中的项链可以用下面的字符串表示: brbrrrbbbrrrrrbrrbbrbbbbrrrrb 假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在另一端做同样的事(颜色可能与在这之前收

洛谷P1207 [USACO1.2]双重回文数 Dual Palindromes

P1207 [USACO1.2]双重回文数 Dual Palindromes 291通过 462提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321就是一个回文数,而77778就不是.当然,回文数的首和尾都应是非零的,因此0220就不是回文数. 事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数. 编