我的代码好像有缺陷,一些数据是判断正确,一些判断错误。请问我应该要怎么改?为什么?
#include
int main()
{
int a,i;
scanf("%d",&a);
if(a>1)
{
for(i=2;i<a;i++)
{
if(a%i==0)
{
printf("no\n");
break;
}
else
{
printf("yes\n");
break;
}
}
}
return 0;
}
for(i=2;i<a;i++)
{
if(a%i==0)
{
printf("no\n");
break;
}
else
{
printf("yes\n");
break;
}
}
修改为
int flag=0;
for(i=2;i<a;i++)
{
if (a % i == 0)
{
flag=1;
break;
}
}
if (flag) printf("no\n"); else printf("yes\n");
看程序是else后面出现了问题 else的情况是 a%i!=0的情况。显然不对,假如a=9;循环从2开始 第一次循环就会打印 no。
else哪里不能break,也不能输出条件判断不对
下面我做了一个java程序可以看看
public static String fn(int a){
String str ="yes" ;
if(a>1){
for(int i=2;i<a/2;i++){
if(a%i==0){
str = "no";
break;
}else{
str = "yes";
}
}
}
return str;
}
//调用函数fn,传入参数15
System.out.println(fn(15));
看程序是else后面出现了问题 else的情况是 a%i!=0的情况。显然不对,假如a=9;循环从2开始 第一次循环就会打印 no。
else哪里不能break,也不能输出条件判断不对
下面我做了一个java程序可以看看
public static String fn(int a){
String str ="yes" ;
if(a>1){
for(int i=2;i<a/2;i++){
if(a%i==0){
str = "no";
break;
}else{
str = "yes";
}
}
}
return str;
}
//调用函数fn,传入参数15
System.out.println(fn(15));
是else部分出了错误
#include
int solve(int a)
{
for(i=2;i*i<=a;i++)
{
if(a%i==0)
{
printf("no\n");
return 0;
}
}
return 1;
}
int main()
{
int a,i;
scanf("%d",&a);
if(a>1)
{
if(solve(a))
{
printf("yes\n");
}
}
return 0;
}
i*i<=a i从2到 i*i<a 中i的数都不能被a整除a才是素数
#include
int main()
{
int a,i,temp=1;
scanf("%d",&a);
if(a>1)
{
for(i=0;i<a;i++)
if(a%i==0)
{
temp=0;
break;
}
if(temp=1)
printf("yes");
}
return 0;
}
#include
int main()
{
int i;
for(i=2;i<=n-1;i++)
{
int j=0;
for(j=2;j<i;j++)
{
if(i%j==0)
{
break;
}
}
if(i==j)
{
printf("%d ",i);
}
return 0;
}
你运行一下试试
#include
int main()
{
int i;
int n;
scanf("%d",&n);
for(i=2;i<=n-1;i++)
{
int j=0;
for(j=2;j<i;j++)
{
if(i%j==0)
{
break;
}
}
if(i==j)
{
printf("%d ",i);
}
}
return 0;
}
加个flag=1表示已经整除,flag=0表示继续进行整除运算,另外i只要<sqrt(a)就行了。
#include
int main()
{
int a,i;
scanf("%d",&a);
if(a>1)
{
for(i=2;i<a-1;i++)
{
if(a%i==0)
{
printf("no\n");
break;
}
else
{
printf("yes\n");
break;
}
}
}
return 0;
}
改好了,for循环条件那里减一就行了