难度:2。
分析:
本题思想很简单,循环num次,每次输入一个数判断是否是素数,再计算最近的素数和距离。
不过第一遍写完提交AC不了。仔细阅读提示,觉得是边界条件没有考虑清楚。
最后输入测试数据 n= 1 发现输出是 0 1 。
也就是我判断素数的时候没有考虑输入0的情况。
心得:
1.注意边界条件
2.能return就直接return,不要赋值之后再return。见下面分析。
#include<iostream> #include<math.h> using namespace std; bool IsPrime(int n) //修改后的IsPrime { bool value = true; if(n==1||n==0) value = false; for(int i=2;i<=sqrt(n);i++) { if(n%i==0) value = false; } return value; } int primeDistance(int &n)//返回距离最近的素数的距离,n赋值为最近的素数 { int i=0; if(IsPrime(n)) return i; else { while(++i) { if(IsPrime(n-i)) { n = n-i;break; } else if(IsPrime(n+i)) { n = n+i;break; } } } return i; } int main() { int num; cin>>num; while(num--) { int n; cin>>n; int i=primeDistance(n); cout<<n<<" "<<i; } return 0; }
IsPrime函数对比:
第一次写的:
bool IsPrime(int n) { bool value = true; if(n==1||n==0) value = false; for(int i=2;i<=sqrt(n);i++) { if(n%i==0) value= false; } return value; }时间对比:
标记的为第一次的代码。976:88
原文地址:http://blog.csdn.net/think_ycx/article/details/45726461