C语言判断素数问题。。

我的代码好像有缺陷,一些数据是判断正确,一些判断错误。请问我应该要怎么改?为什么?
#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;

}

c

10个回答

 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循环条件那里减一就行了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!