翻开好久没看过的C++, 发现自己竟然连进制转换什么都不会了...简直....
因为之前为防'代码hour'被转移注意力, 手机飞行, 网线拔掉, 倒腾半天错误还挺多的...
第一反应判断素数用的是2~根号n (虽然之前看过一个有好多优化判断素数方法的帖子, 当时看完也惊为天人, 但是紧要关头完全想不起来好嘛TOT)
1.不记得sqrt属于哪个头文件, 竟然不是math
2.Each undeclared identifier is reported only once for each function it appears in
3.int n 本身限定是正整数, 无需再判断是否<0多此一举
4.multi-character character constant
搜索之后确定sqrt出自math, 之前#include <math>报错, 应该改为#include <math.h>(c++标准前) 或者#include <cmath>(标准推出后的),然后问题1,2就都解决啦~
第四个是因为中文单字用了单引号.... 请跟我读"字符单引号, 字符串双引号"(不开森 简直命定的宿敌 sql也总是因为这个出问题...)
没有语法错误啦~ 等我先去测试则个~
...0和1边界值上来就跑偏...这两个从数学定义上其实都不应该是啦
终于喜闻乐见的完成任务啦
//Method_1_normal.cpp //判断素数 //直接循环判断到根号2 //Input n (正整数) //Output 是/否 #include <iostream> #include <cmath> using namespace std; bool judge(int n){//判断是否素数 for(int i = 2;i <= sqrt(n);i++){ if(n%i == 0){ return 0;//存在非1非n可整除,非素数 } } return 1; } int main(){ int n; cin >> n; if(n == 0||n ==1){ cout << "否" << endl; return 0; } bool answer = judge(n); if(answer == 1){ cout << "是" << endl; } else{ cout << "否" << endl; } return 0; }
不知道注释够不够清晰易懂, 大家普遍反映代码注释太少, 我也经常过后再看完全不知道自己在干嘛.....在努力改进啦~改了两块逻辑错误,一个是0/1的特殊,另一个是sqrt处从<改成<=,不然4会卡在边界上.
勉为其难也只能算25行....还差一半呢....
我去实现个method_2
广告之后很快回来~~~~~
=======================================我才不是卖安利呢=============================================
看到别人关于判断素数的算法觉得自己可能只能自信的说比小学生聪慧睿智一点!!!大受打击...
后来看到更多帖子觉得我的智商可能还是可以在水平线上下[~旋转跳跃闭着眼~]
废话不多说 今天先实现个简单的埃拉托色尼(Eratosthenes)筛法 (其他算法理解起来都好用脑....今日智商已售罄...明日请早)哦 应该是它的优化, 我也不晓得已经优化到哪个国度了
咦咦, 这个使用范围跟我题目要求的不太一样, 连续整数比较有效.
//2014.7.14....
不行不行还是每天一个小时提高效率吧 如果每天强求50行 我想我很快就打击的坚持不下去
先把昨天发上来激励自己一把
继续计时今天的一小时啦:)