C++笔记(0)——判定⼀个数字是否是素数
博主之前使⽤的编程语⾔是Python,但是这门语⾔的效率⽐较低(通常,不优化的情况下,但是即便如此我还是偏爱Python),⽽且博主打算参加PAT考试(真正的原因),及博
主打算顺便深⼊学习下机器学习框架(如PyTorch)和CUDA,所以必须要学C++。所以,开始吧。
我不打算直接从语法⼊⼿,这样太浪费时间了。因为我已经有了C和Python的基础,所以我觉得,直接上项⽬练⼿,遇到不懂的东西再去翻看相关书籍或观看相关视频会快很多。
我的⽬的很明确,就是将PTA刷到xxx分(依据某TED演讲中“如果你想要达到某个⽬标那么就不要将这个⽬标说出去不然你会在别⼈的赞赏中以为⾃⼰已经达成⽬标⽽不努⼒并开
始犒劳⾃⼰”效应,这⾥做马赛克处理)。因此,这⾥的笔记都是关于我平时刷分时遇到感觉“哇,这个功能真的好有⽤如果早知道了的话应该会很幸福吧”情况时的相关知识点。
其实我是第⼀次使⽤Dev-C++,但是由于以前碰过Common::Blocks之类的IDE(VisualStudio就懒得提了,烂⼤街),所以上⼿起来没什么问题,就懒得记录太多没必要的东西
了(例如如何使⽤)。但是要提⼀下的就是要记得设置⼀下编译器。
以上就是设置编译器⽀持C++11标准的步骤。下⾯进⼊正题。
判断⼀个数字是否是素数
其实⼀开始那三⾏我原本打算省略掉的,但是这⾥还是加上去⽐较好,之后的内容都默认已经引⼊了这些库和在的namespace下。
直接谈谈函数的原理吧,其实很简单,背后的数学原理就不谈了(毕竟⽐较简单)。这⾥的函数的⼯作就是:
判断是不是⼩于1,如果是那么肯定不是素数,所以返回
先将输⼊的数字转换成浮点数,然后再进⾏开⽅处理,得到数字
接下来就是从2开始,⼀直到开⽅之后的数字为⽌,不断地将数字与之间的数进⾏求余,如果求余结果为,则表明可以被整除,那么就不是素数(因为素数只能被
1和⾃⼰整除),返回fal
如果循环执⾏完都没有返回返回值,那么继续执⾏,返回
下⾯写⼀道题练练⼿。
SexyPrimes
Nowgivenaninteger,youaresuppodtotellifitisaxyprime.
InputSpecification:
givesapositiveintegerN(≤10)
注意,上⾯的题⽬及代码来⾃,原作者是merely尘埃。
具体做题步骤还是很简单的,所以就不细说了。
不过值得注意的是后⾯的中的判定条件,⼀定要注意顺序,应该在前⾯。题⽬要求的是输出较⼩的值,⽽或运算的
特点是⼀旦遇到判定为真的值那么就直接输出真,不会再继续判定(所以如果是真,那么就不会运⾏,直接输出真),所以的判定应当放在前
⾯。
#include
#include
usingnamespacestd;
boolisPrime(intn){
if(n<=1)returnfal;
intsqr=int(sqrt(1.0*n));
for(inti=2;i<=sqr;++i){
if(n%i==0)returnfal;
}
returntrue;
}
std
fal
nsqr
sqrn2~sqe0nn
forfaltrue
#include
#include
usingnamespacestd;
boolisPrime(intn){
if(n<=1)returnfal;
intsqr=int(sqrt(1.0*n));
for(inti=2;i<=sqr;++i){
if(n%i==0)returnfal;
}
returntrue;
}
intmain(){
intn;
boolflag=true;
scanf("%d",&n);
if(isPrime(n)){
if(isPrime(n-6))printf("yesn%dn",n-6);
elif(isPrime(n+6))printf("yesn%dn",n+6);
elflag=fal;
}
elflag=fal;
if(!flag){
while(!isPrime(n)||!(isPrime(n+6)||isPrime(n-6)))++n;
printf("non%dn",n);
}
return0;
}
while(!isPrime(n)||!(isPrime(n+6)||isPrime(n-6)))++n;+-
isPrime(n+6)isPrime(n-6)n+6
本文发布于:2022-11-15 15:27:58,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/25115.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |