C++笔记(0)——判定一个数字是否是素数
博主之前使用的编程语言是Python,但是这门语言的效率比较低(通常,不优化的情况下,但是即便如此我还是偏爱Python),而且博主打算参加PAT考试(真正的原因),及博主打算顺便深入学习下机器学习框架(如PyTorch)和CUDA,所以必须要学C++。所以,开始吧。
我不打算直接从语法入手,这样太浪费时间了。因为我已经有了C和Python的基础,所以我觉得,直接上项目练手,遇到不懂的东西再去翻看相关书籍或观看相关视频会快很多。我的目的很明确,就是将PTA刷到xxx分(依据某TED演讲中“如果你想要达到某个目标那么就不要将这个目标说出去不然你会在别人的赞赏中以为自己已经达成目标而不努力并开始犒劳自己”效应,这里做马赛克处理)。因此,这里的笔记都是关于我平时刷分时遇到感觉“哇,这个功能真的好有用如果早知道了的话应该会很幸福吧”情况时的相关知识点。
其实我是第一次使用Dev-C++,但是由于以前碰过Common::Blocks之类的IDE(Visual Studio就懒得提了,烂大街),所以上手起来没什么问题,就懒得记录太多没必要的东西了(例如如何使用)。但是要提一下的就是要记得设置一下编译器。


以上就是设置编译器支持C++11标准的步骤。下面进入正题。
判断一个数字是否是素数
#include <cstdio>
#include <cmath>
using namespace std;
bool isPrime(int n){
if (n<=1) return false;
int sqr = int(sqrt(1.0 * n));
for(int i=2; i<=sqr; ++i){
if(n % i == 0) return false;
}
return true;
}
其实一开始那三行我原本打算省略掉的,但是这里还是加上去比较好,之后的内容都默认已经引入了这些库和在std的namespace下。
直接谈谈函数的原理吧,其实很简单,背后的数学原理就不谈了(毕竟比较简单)。这里的函数的工作就是:
- 判断是不是小于1,如果是那么肯定不是素数,所以返回
false - 先将输入的数字
n转换成浮点数,然后再进行开方处理,得到数字sqr - 接下来就是从2开始,一直到开方之后的数字
sqr为止,不断地将数字n与2~sqe之间的数进行求余,如果求余结果为0,则表明n可以被整除,那么n就不是素数(因为素数只能被1和自己整除),返回false - 如果
for循环执行完都没有返回返回false值,那么继续执行,返回true
下面写一道题练练手。
Sexy Primes
Sexy primes are pairs of primes of the form (p, p+6), so-named since "sex" is the Latin word for "six". (Quoted from http://mathworld.wolfram.com/SexyPrimes.html)
Now given an integer, you are supposed to tell if it is a sexy prime.
Input Specification:
Each input file contains one test case. Each case gives a positive integer N (≤10)
注意,上面的题目及代码来自,原作者是merely尘埃。
#include <cstdio>
#include <cmath>
using namespace std;
bool isPrime(int n){
if (n<=1) return false;
int sqr = int(sqrt(1.0 * n));
for(int i=2; i<=sqr; ++i){
if(n % i == 0) return false;
}
return true;
}
int main(){
int n;
bool flag = true;
scanf("%d", &n);
if(isPrime(n)){
if(isPrime(n-6)) printf("yes\n%d\n", n-6);
else if(isPrime(n+6)) printf("yes\n%d\n", n+6);
else flag = false;
}
else flag = false;
if(!flag){
while(!isPrime(n) || !( isPrime(n+6)||isPrime(n-6)) ) ++n;
printf("no\n%d\n", n);
}
return 0;
}
具体做题步骤还是很简单的,所以就不细说了。
不过值得注意的是后面的while(!isPrime(n) || !( isPrime(n+6)||isPrime(n-6)) ) ++n;中的判定条件,一定要注意顺序,+应该在-前面。题目要求的是输出较小的值,而或运算的特点是一旦遇到判定为真的值那么就直接输出真,不会再继续判定(所以如果isPrime(n+6)是真,那么isPrime(n-6)就不会运行,直接输出真),所以n+6的判定应当放在前面。
C++笔记(0)——判定一个数字是否是素数的更多相关文章
- C和Java判断一个数字是否为素数
C: /* 素数: 素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. */ # include <stdio. ...
- c编程:提示用户输入一个0—9的数字进行猜测电脑产生的随机数。一共有三次机会。
// // main.c // 使用c语言进行编程: 题目:由电脑生成一个由0-9之间的随机数,提示用户也输入一个数字进行猜测.当猜测三次仍不中的时候结束程序. 编译环境:Xcode6.3 特别介 ...
- 西方教育骗局,终于明白精英和普通人的残酷差别!(该校流传着一个数字——4。即“4小时睡眠、4杯咖啡、GPA4.0”——要想获得满分为4分的成绩,每天只睡4个小时,困了就喝4大杯咖啡)
2018-02-14 00:00英国/私立学校 你不知道的是:西方教育通过一个宽松的过程,偷偷完成了社会分层. 1 “中国学生真是太苦了!”我的同学李女士总是发出这样的感慨. 李女士是我中学同学,在一 ...
- 如果在num1的任何位置有一个数字的连续三倍,并且在num2中有一个数字的连续两倍,则返回1。 如果不是这样,则返回0
''' 它接受数字num1和num2,如果在num1的任何位置有一个数字的连续三倍,并且在num2中有一个数字的连续两倍,则返回1. 如果不是这样,则返回0 例子 triple_double(4519 ...
- Java笔记之Scanner先读取一个数字,在读取一行字符串方法分析
问题:大家在学习Java读取数据的时候一般都是使用Scanner方法读取数据,但是其中有一个小问题大家可能不知道, 就是我们在使用scanner的时候如果你先读取一个数字,在读取一行带有空格的字符串, ...
- Linux系统学习笔记之 1 一个简单的shell程序
不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊. 一个简单的shell程序 shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步: ...
- JavaScript学习笔记[0]
JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...
- 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址
驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...
- 驱动开发学习笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇
驱动开发读书笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇 下面这段摘自 linux源码里面的文档 : 内核版本2.6.22Doc ...
随机推荐
- jquery click()方法 语法
jquery click()方法 语法 作用:当点击元素时,会发生 click 事件.当鼠标指针停留在元素上方,然后按下并松开鼠标左键时,就会发生一次 click.click() 方法触发 click ...
- C# 获取文件信息
string fullPath = @"d:\test\default.avi"; string filename = Path.GetFileName(fullPath);//返 ...
- ID生成 雪花算法
/** * ID生成 雪花算法 */ public class SnowFlake { public static SnowFlake getInstance() { return Singleton ...
- AtCoder AGC032D Rotation Sort (DP)
题目链接 https://atcoder.jp/contests/agc032/tasks/agc032_d 题解 又是一道神仙题啊啊啊啊...atcoder题真的做不来啊QAQ 第一步又是神仙转化: ...
- 高效的js原生代码
1.遍历元素 //不推荐 var element = document.getElementsByTagName('div'); for(var i=0; i<element.length; i ...
- docker启动redis并使用java连接
一.先查找镜像 docker search redis 二.拉取镜像 docker pull redis三.等待拉取完毕 四.查看拉去的镜像 docker iamges 五.运行redis 连接1:h ...
- vue-preview 缩略图
如果我们在 vue 中想使用缩略图的话,可以使用 vue-preview 的插件 小图的缩略 大图的样式 使用方法:vue-preview 下 载: npm i vue-preview 使用方法 ...
- openssl生成秘钥对
openssl genrsa -out pri.pem openssl rsa -in pri.pem -out pub.pem -pubout 这样就生成秘钥对了,其中pri.pem是私钥,pub. ...
- Java String.Format() 方法及参数说明
转自:https://blueram.iteye.com/blog/441683 JDK1.5中,String类新增了一个很有用的静态方法String.format():format(Locale l ...
- nodejs之mongodb操作
声明: 当查询到数据库数据后,对数据库数据进行遍历,可以采用toArray()函数,具体实现可以看第六点 1.本地安装mongodb 安装包:https://www.mongodb.com/downl ...