博主之前使用的编程语言是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. 判断是不是小于1,如果是那么肯定不是素数,所以返回false
  2. 先将输入的数字n转换成浮点数,然后再进行开方处理,得到数字sqr
  3. 接下来就是从2开始,一直到开方之后的数字sqr为止,不断地将数字n2~sqe之间的数进行求余,如果求余结果为0,则表明n可以被整除,那么n就不是素数(因为素数只能被1和自己整除),返回false
  4. 如果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)——判定一个数字是否是素数的更多相关文章

  1. C和Java判断一个数字是否为素数

    C: /* 素数: 素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. */ # include <stdio. ...

  2. c编程:提示用户输入一个0—9的数字进行猜测电脑产生的随机数。一共有三次机会。

    // //  main.c //  使用c语言进行编程: 题目:由电脑生成一个由0-9之间的随机数,提示用户也输入一个数字进行猜测.当猜测三次仍不中的时候结束程序. 编译环境:Xcode6.3 特别介 ...

  3. 西方教育骗局,终于明白精英和普通人的残酷差别!(该校流传着一个数字——4。即“4小时睡眠、4杯咖啡、GPA4.0”——要想获得满分为4分的成绩,每天只睡4个小时,困了就喝4大杯咖啡)

    2018-02-14 00:00英国/私立学校 你不知道的是:西方教育通过一个宽松的过程,偷偷完成了社会分层. 1 “中国学生真是太苦了!”我的同学李女士总是发出这样的感慨. 李女士是我中学同学,在一 ...

  4. 如果在num1的任何位置有一个数字的连续三倍,并且在num2中有一个数字的连续两倍,则返回1。 如果不是这样,则返回0

    ''' 它接受数字num1和num2,如果在num1的任何位置有一个数字的连续三倍,并且在num2中有一个数字的连续两倍,则返回1. 如果不是这样,则返回0 例子 triple_double(4519 ...

  5. Java笔记之Scanner先读取一个数字,在读取一行字符串方法分析

    问题:大家在学习Java读取数据的时候一般都是使用Scanner方法读取数据,但是其中有一个小问题大家可能不知道, 就是我们在使用scanner的时候如果你先读取一个数字,在读取一行带有空格的字符串, ...

  6. Linux系统学习笔记之 1 一个简单的shell程序

    不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊. 一个简单的shell程序 shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步: ...

  7. JavaScript学习笔记[0]

    JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...

  8. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  9. 驱动开发学习笔记. 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 ...

随机推荐

  1. Codeforces #499 E Border ( 裴蜀定理 )

    题目链接 题意 : 给出 N 种纸币.并且给出面值.每种纸币的数量可以任选.问你得出来的数在 k 进制下.末尾位的数有多少种可能.输出具体方案 分析 : 纸币任意选择组成的和 可以用一个一次多项式来表 ...

  2. JavaScript 的基本概念( ES5 )

    语法 区分大小写 标识符 第一个字符必须是一个字母,下划线或者一个美元符( $ ).其他规则无论,最好按照通用的驼峰大小写. 注释 // 单行注释 /* 多行注释 */ 严格模式 在顶部添加如下代码 ...

  3. [python 笔记] __iter__迭代器

    可迭代对象和迭代器 https://blog.csdn.net/nightcharm/article/details/78964676 可迭代对象 对象里面含有__iter__()方法的实现,对象的_ ...

  4. DVWA--Brute Force

    这次我们尝试的内容是DVWA的暴力破解 --lower 先抓取一个登陆的包 然后发送到后在Position选项中设置需要破解的变量.Burpsuite会自动设置许多变量,单击“Clear”按钮,把默认 ...

  5. echarts之bootstrap选项卡不能显示其他标签echarts图表

    在echarts跟bootstrap选项卡整合的时候,默认第一个选中选项卡可以正常加载echarts图表,但是切换其他选项的时候不能渲染出其他选项卡echarts图表. 解决方法: 在js中添加代码: ...

  6. Python set 用法

    (原文链接)http://blog.csdn.net/business122/article/details/7541486# python的set和其他语言类似, 是一个无序不重复元素集, 基本功能 ...

  7. 全面解读php-php会话控制技术

    一.PHP会话控制技术 1.为什么要使用会话控制技术? 因为http协议是无状态协议,所以同一个用户在请求同一个页面两次的时候,http协议不会认为这两次请求都来自于同一个用户,会把它们当做是两次请求 ...

  8. slub

    1.前言 在Linux中,伙伴系统(buddy system)是以页为单位管理和分配内存.但是现实的需求却以字节为单位,假如我们需要申请20Bytes,总不能分配一页吧!那岂不是严重浪费内存.那么该如 ...

  9. weka数据导入

    每一行代表一条数据,用逗号分开属性,最后一列为分类标签 将后缀名改为csv,用excel打开,为每一列加上属性名称,直接导入weka即可

  10. VS Code 中的LaTeX自动保存问题

    最近更新了VS Code,编辑LaTeX文档是出现了一个很恼人的问题:只要文档一改动,立马就Build,在更新之前是没有这个问题的. 解决方案如下:在设置里找到Auto Build: Run选项,将其 ...