在学习C语言过程中,素数判断也是一个经典题目,大约每年都有40%的学生学不会。
究其原因,是逻辑没有理顺的原因。
下面是一个典型错误,看看你是否犯过。
输入一个整数x,判断其是否是素数,若是输出Yes,否则输出No。
某学生写成下面的样子。
# include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
LL x,i;
cin>>x;
for(i=2;i<x;i++)
{
if(x%i==0)
{
cout<<"No"<<endl;
return 1;
}
else
{
cout<<"Yes"<<endl;
}
}
return 0;
}
它觉得很对,但是提交到Online Judge平台,报错。
然而,他就是转不过弯,总是认为不错。
我们通过测试说话:
测试1:
输入2
没有输出结果!错误!
输入3
判断正确。
输入4:
判断正确
输入5:
输出3个Yes,过分了!
输入9:
又是Yes又是No,咋可能对哦。
所以,这个程序犯了逻辑错误!!
程序中
if(x%i==0)
{
cout<<"No"<<endl;
return 1;
}
else
{
cout<<"Yes"<<endl;
}
逻辑是:如果x不能被 i 整除,就是素数。显然不对头啊。
比如9,不能被2正确,你就马上判断其是素数了,显然逻辑错误。
正确程序写下来:
# include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
LL x,i;
cin>>x;
for(i=2;i<x;i++)
{
if(x%i==0)
{
cout<<"No"<<endl;
return 0;
}
}
cout<<"Yes"<<endl;
return 0;
}
逻辑:只有当[2,x-1]之间没有任何一个约数时,才能断定x是素数。
这世界上有多少逻辑差的人做了领导,耽误了时代的进步!!