马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
输入描述
第一行,一个整数T(1 <= T <= 100),表示询问的次数
下面T行,每行一个整数x(1<=x <= 100000000)第一行,一个整数T(1 <= T <= 100),表示询问的次数
输出描述
输出T行,对于T次询问,是素数输出"Yes"(不包含引号),不是素数输出"No"(不包含引号)#include<bits/stdc++.h>
using namespace std;
int su(int x)
{
if(x<2) return 0;
for(int i=2;i<sqrt(x);i++)
{
if(x%i==0) return 0;
}
return 1;
}
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
if(su(n)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
问题出在循环条件上。在判断一个数是否为素数时,应该将循环条件改为 i <= sqrt(x) ,而不是 i < sqrt(x) 。因为 sqrt(x) 的结果可能是一个浮点数,而循环条件中的 i 是一个整数,所以应该使用 <= 来判断。修改后的代码如下所示:
#include<bits/stdc++.h>
using namespace std;
int su(int x)
{
if(x<2) return 0;
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0) return 0;
}
return 1;
}
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
if(su(n)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
这样修改后,代码就可以正确地判断一个数是否为素数了。
|