博主之前使用的编程语言是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. JSP大文件上传断点续传解决方案

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  2. TensorFlow使用记录 (三): Learning Rate Scheduling

    file: tensorflow/python/training/learning_rate_decay.py 参考:tensorflow中常用学习率更新策略 神经网络中通过超参数 learning ...

  3. Nginx配置记录【例2】

    B服务器,例: [root@localhost conf.d]# egrep -v "^#|^$" /etc/nginx/nginx.conf user nginx; worker ...

  4. Linux环境下TomCat使用指定JDK的版本

    服务器是web服务器,在上面安装了jdk1.7和jdk1.8.及多个tomcat应用,默认/etc/profile 配置的jdk1.7,大部分tomcat应用使用的也是jdk1.7, 但目前有一个新项 ...

  5. input(移动端iOS)输入内容时调用软件盘后页面底部留白问题

    iOS/input输入框调用软键盘底部留白 只需input输入框失去焦点时,让页面自动下移即可恢复 <input placeholder="请输入用户名" v-model=& ...

  6. C++入门经典-例6.9-通过指针变量获取数组中的元素

    1:通过指针引用数组,需要先声明一个数组,再声明一个指针. int a[10]; int *p; 然后通过&运算符获取数组中元素的地址,再将地址值赋给指针变量. p=&a[0]; 代码 ...

  7. TCP定时器 之 连接建立定时器

    当服务器收到新的syn请求,会回复syn+ack给请求端,若某时间内未收到请求端回复的ack,新建连接定时器超时执行回调,重传syn+ack,当超时超过固定次数时,该连接中止:本文主要分析其初始化流程 ...

  8. tps抖动

    https://blog.csdn.net/lzqinfen/article/details/46820673 tps抖动厉害的原因?突然增加成倍的用户,如果性能表现良好,TPS应该成倍增加,响应时间 ...

  9. Java-Thread 线程

    一.进程与线程的概念 进程和线程都是一个CPU工作时间段的描述,只是关注点不同. 进程(Process): 资源(CPU,内存等,文件,网络等)分配的基本单位.系统中有很多进程,它们都会使用内存.为了 ...

  10. 全面解读php-开发环境及配置

    一.版本控制软件 1.集中式 (CVS和 SVN) 中间有一个中央服务器,所有的客户机都会把版本信息上传到中央服务器里,版本信息只在中央服务器里保存,当我们去上传或者下载的时候 ,都是从中央服务器来连 ...