博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib (数论—素数 + DFS)
阅读量:6215 次
发布时间:2019-06-21

本文共 1268 字,大约阅读时间需要 4 分钟。

这大概是我写的第一个DFS

题目描述

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

输入输出格式

输入格式:

 

单独的一行包含N。

 

输出格式:

 

按顺序输出长度为 N 的特殊质数,每行一个。

 

输入输出样例

输入样例#1:
4
输出样例#1:
2333233923932399293931193137373337393793379759397193733173337393 思路:先暴力的话,最大位为素数,然后一一枚举后面的位上的数,判断是否为素数,其实我们可以知道后面位上的数一定不能是偶数 比如3277的话,32不符合。所以我们只能在奇数中选,同时也不能选5(同理),则,在非最高位的选择在1,3,7,9中选择 那么最高位一定为2, 3, 5, 7.然后搜索就行了,当然也有素数判定的函数。 素数判定:
bool pri(int x){    if (x < 2 || x % 2 == 0)return 0;    for (int i = 3; i*i < x;i+=2)    if (x%i == 0)return 0;    return 1;}复杂度大概在 sqrt(n)/2

 

#include
using namespace std;int n;bool pri(int x){ if (x < 2 || x % 2 == 0)return 0; for (int i = 3; i*i < x;i+=2) if (x%i == 0)return 0; return 1;}void DFS(int num, int w){ if (w == n){ cout << num << endl; return; } for (int i = 1; i <= 9; i += 2) { if (i == 5)continue; if (pri(num * 10 + i)) { DFS(num * 10 + i, w + 1); } }}int main(){ cin >> n; DFS(2, 1); DFS(3, 1); DFS(5, 1); DFS(7, 1); return 0;}

 

转载于:https://www.cnblogs.com/ALINGMAOMAO/p/9581730.html

你可能感兴趣的文章
jquery的checkbox,radio,select等方法总结
查看>>
Linux coredump
查看>>
Ubuntu 10.04安装水晶(Mercury)无线网卡驱动
查看>>
Myeclipes快捷键
查看>>
我的友情链接
查看>>
ToRPC:一个双向RPC的Python实现
查看>>
netty框架的学习笔记 + 一个netty实现websocket通信案例
查看>>
我的友情链接
查看>>
nginx在reload时候报错invalid PID number
查看>>
神经网络和深度学习-第二周神经网络基础-第二节:Logistic回归
查看>>
Myeclipse代码提示及如何设置自动提示
查看>>
setTimeOut(),和setInterVal()调用函数加不加括号!!!
查看>>
c/c++中保留两位有效数字
查看>>
urlparse获取url后面的参数
查看>>
ElasticSearch 2 (32) - 信息聚合系列之范围限定
查看>>
VS2010远程调试C#程序
查看>>
notepad++正则表达式例子
查看>>
[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
查看>>
由String类的Split方法所遇到的两个问题
查看>>
Python3.4 12306 2015年3月验证码识别
查看>>