我想要在排除0,1的情况下,用便利法判断是否为素数。 代码在输入2,3,4时 出错,这个错在哪里? 想1个小时了
#include <stdio.h>
int main ( ) //int argc; const char *argv[]
{//素数:只能被1和自身整除
int i,x;
printf("输入一个数字,我告诉你它是否为素数: ");
scanf("%d",&x);
printf(" \n ");
printf(" 输入-1结束程序。 ");
while (x!=-1)//输入-1结束程序
{
int isPrime=0 ;//1代表是素数。
if (x>1)
{
for(i=2;i<x-1;i++) {
if(x%i==0) {
isPrime = 0;
continue; //忘记跳出了,耽误半小时
}else{
isPrime=1;
}
}
/* code */
}else{
goto lol;
}
lol:
if(isPrime==1){
printf("是素数\n");
} else {
printf("不是素数\n");
}
printf("输入一个数字,我告诉你它是否为素数: ");
scanf("%d",&x);
printf(" \n ");
printf(" 输入-1结束程序。 ");
/* code */
}
return 0;
}
结果如下:
“Devil组”引证GPT后的撰写:
主要是在判断素数的逻辑上存在一些错误。以下是修改后的代码:
#include <stdio.h>
int main() {
int x;
printf("输入一个数字,我告诉你它是否为素数:");
scanf("%d", &x);
printf("\n输入-1结束程序。\n");
while (x != -1) {
int isPrime = 1; // 1代表是素数,0代表不是素数。
if (x <= 1) {
isPrime = 0; // 负数、0、1都不是素数。
} else {
for (int i = 2; i < x; i++) {
if (x % i == 0) {
isPrime = 0; // 只要有一个数能整除x,那么x就不是素数。
break; // 找到一个因子就可以跳出循环了。
}
}
}
if (isPrime == 1) {
printf("%d是素数\n", x);
} else {
printf("%d不是素数\n", x);
}
printf("输入一个数字,我告诉你它是否为素数:");
scanf("%d", &x);
printf("\n输入-1结束程序。\n");
}
return 0;
}
修改后的代码,在判断素数的逻辑上做了如下改动:
将isPrime的初始值设置为1,表示假设这个数字是素数。如果在后面的循环中发现可以被整除,则将其设置为0。
在判断素数的循环中,将循环的终止条件改为i < x。因为在判断x是否是素数时,只需要从2开始到x-1的所有数中去判断,如果有一个数能整除x,那么x就不是素数。
在判断素数的循环中,加入了break语句。因为如果找到一个因子能够整除x,那么后面的循环就没有必要继续执行了,可以立即跳出循环。
逻辑上有些问题,我们应该先假设他是素数,isPrime = 1,然后,当有整除因子的时候 isPrime = 0,然后跳出
#include <stdio.h>
int main ( ) //int argc; const char *argv[]
{//素数:只能被1和自身整除
int i,x;
printf("输入一个数字,我告诉你它是否为素数: ");
scanf("%d",&x);
printf(" \n ");
printf(" 输入-1结束程序。 ");
while (x!=-1)
{
int isPrime=1 ;//1代表是素数。
if (x>1)
{
for(i=2;i<x-1;i++) {
if(x%i==0) {
isPrime = 0;
//continue; //忘记跳出了,耽误半小时
break; // 是终止循环跳出,不是 continue 继续
}
}
/* code */
}else{
isPrime = 0;
}
lol:
if(isPrime==1){
printf("是素数\n");
} else {
printf("不是素数\n");
}
printf("输入一个数字,我告诉你它是否为素数: ");
scanf("%d",&x);
printf(" \n ");
printf(" 输入-1结束程序。 ");
/* code */
}
return 0;
}
你想排除什么,加个if判断不就得了
实际上,只要是小于2的数,不管是0,1还是负数,都既不是素数也不是合数
太乱了
int isprime = 1;
for(i=2;i<x-1;i++)
{
if(x%i==0) {
isPrime = 0;
break;
}
}
if(isPrime==1){
printf("是素数\n");
} else {
printf("不是素数\n");
}
参考GPT的内容和自己的思路:
您的程序有以下问题:
#include <stdio.h>
int main()
{
int x;
printf("输入一个数字,我告诉你它是否为素数:");
scanf("%d", &x);
while (x != -1)
{
int isPrime = 1;
if (x > 2)
{
for (int i = 2; i <= x / 2; i++)
{
if (x % i == 0)
{
isPrime = 0;
break;
}
}
}
else if (x == 2)
{
isPrime = 1;
}
else
{
isPrime = 0;
}
if (isPrime == 1)
{
printf("%d是素数\n", x);
}
else
{
printf("%d不是素数\n", x);
}
printf("输入一个数字,我告诉你它是否为素数:");
scanf("%d", &x);
}
return 0;
}