关于例题求素数改写后所遇问题
问题描述:我改写了求素数的例题,运行时无报错信息。输入12,不是素数,13,是素数。但81,15却还是显示为素数。(Linux下gcc编译器)改写源码:
#include <stdio.h>
int main()
{
int i, num;
_Bool flag = 0;
printf("请输入一个整数:");
scanf("%d", &num);
for (i = 2; i < num / 2; i++)
{
if (num % i)
{
flag = 1;
break;
}
else
{
flag = 0;
break;
}
}
if (flag)
{
printf("%d是一个素数\n", num);
}
else
{
printf("%d不是素数\n", num);
}
return 0;
}运行结果:{:10_266:}
例题源码:
#include <stdio.h>
int main()
{
int i, num;
_Bool flag = 1;
printf("请输入一个整数:");
scanf("%d", &num);
for (i = 2; i < num / 2; i++)
if (num % i == 0)
{
flag = 0;
}
}
if (flag)
{
printf("%d是一个素数!\n", num);
}
else
{
printf("%d不是一个素数!\n", num);
}
return 0;
}例题运行结果:
使用DevC++:{:10_282:}
littleshu 发表于 2020-8-2 11:35
可以简单解释一下吗?
例如9 当9%2!=0是你的程序flag=1就会退出循环,结果导致显示是一个素数,不会继续进行%3之后的操作 请见:https://fishc.com.cn/thread-173223-1-1.html 本帖最后由 baige 于 2020-8-2 11:33 编辑
#include <stdio.h>
int main()
{
int i, num;
_Bool flag = 0;
printf("请输入一个整数:");
scanf("%d", &num);
for (i = 2; i < num / 2; i++)
{
if (num % i)
{
flag = 1;// break去掉;当num%i!=0需要继续向下判断,是否可以被i整除
}
else
{
flag = 0;
break;
}
}
if (flag)
{
printf("%d是一个素数\n", num);
}
else
{
printf("%d不是素数\n", num);
}
return 0;
} zltzlt 发表于 2020-8-2 11:30
请见:https://fishc.com.cn/thread-173223-1-1.html
这不是关键啊{:10_277:} baige 发表于 2020-8-2 11:31
可以简单解释一下吗?{:10_250:} #include <stdio.h>
int main()
{
int i, num;
_Bool flag = 0;
printf("请输入一个整数:");
scanf("%d", &num);
for (i = 2; i < num / 2; i++)
{
if (num % i != 0)// 当n%i不等于0时,需要继续进行循环,保证到num/2时n仍然不能被i整除
{
flag = 1;// break去掉;当num%i!=0需要继续向下判断,是否可以被i整除
}
else
{
flag = 0;
break; // 当被i整除时说明该数不是素数
}
}
if (flag == 1)
{
printf("%d是一个素数\n", num);
}
else // flag == 0;
{
printf("%d不是素数\n", num);
}
return 0;
} baige 发表于 2020-8-2 11:28
例如9 当9%2!=0是你的程序flag=1就会退出循环,结果导致显示是一个素数,不会继续进行%3之后的操作
谢谢谢谢{:10_281:}
页:
[1]