难度: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