博主之前使用的编程语言是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为止,不断地将数字n与2~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. echarts 图形图例文字太长如何解决

    文章来源: https://blog.csdn.net/csm17805987903/article/details/85111835 legend 文字很多的时候对文字做裁剪并且开启 tooltip ...

  2. 【BZOJ2459】 [BeiJing2011]神秘好人

    Description 有一个神秘好人跟Bdcxq玩一个游戏,如果Bdcxq成功完成了这个游戏,那么他将会得到一件礼物. 这个游戏是这样的: 有一个梯子形的图如下,每条边都有一个权值. 神秘好人一开始 ...

  3. HDU 2859—Phalanx(DP)

    Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Today i ...

  4. Unity3D_(插件)小地图自刷新制作Minimap小地图

    制作小地图:小地图自刷新制作小地图 原理:用不同的图标表示场景中不同的游戏物体,将(场景中)游戏物体位置实时放置小地图上,并控制图标的位置更新 好处:可更好控制小地图上所需要显示的游戏物体 游戏项目已 ...

  5. 微信小程序_简单组件使用与数据绑定

    简单的数据传值 官方文档:传送门 点击"按钮"测试后,按钮文本改变,下方text文本改变,通过console.log()在输出台中打印按钮文本信息 程序结构 Page({ //页面 ...

  6. hive 调优(三)tez优化

    我们采用亚马逊emr构建的集群,用hive查询的时候报错,FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.e ...

  7. Android Handler 内存泄漏问题

    1. 问题先看以下代码: 第一种写法: public class MainActivity extends AppCompatActivity { ... ... ... private class ...

  8. C++入门经典-例3.21-goto语句实现循环

    1:代码如下: // 3.21.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...

  9. 牛客 19-5-3 QAQ

    #include<iostream> #include<cstring> using namespace std; typedef long long LL; int main ...

  10. 黑马lavarel教程---8、session

    黑马lavarel教程---8.session 一.总结 一句话总结: 1.session默认保存在文件中 2.使用的话通过Session门面或者辅助函数 1.lavarel中session的保存方式 ...