#include<stdio.h>
#include<math.h>
main()
{
int i,n,flag=0;
printf("请输入一个大于1的整数:");
scanf("%d",&n);
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
flag=1;
}
if(flag==0)
printf("%d是质数\n",n);
else
printf("%d不是质数\n",n);
}
flag首先定义一个值为零,当它的值不变的时候结果就输出“是质数”。
如果flag的值为非零的话,那就输出“不是质数”。
它的循环为:
for(i=2;i<=sqrt(n);i++)//它的意思就是用来进行循环的就是从2一直到根号n.
if(n%i==0)//它的意思就是判断这里是否有能被除尽的存在。
flag=1;//这个的意思就是如果有的话就返回一个非零的值(这里习惯了给一个1)
它的逻辑就是这样的。
最后两句话:
if(flag==0)
printf("%d是质数\n",n);//flag的值不变(初始值为0)就证明没有能被除尽的存在。
else
printf("%d不是质数\n",n);//flag的值变了(因为有返回值,所以非零),就证明有能被除尽的存在。
flag就是为后面if的条件做准备的,flag的值在for循环(红色部分就是佛如循环的循环体)里面进行改变:
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
flag=1;
}
flag的初始值是0,如果n能被整除就将flag赋值为1,只要有一次赋值flag为1,就说明了n并不是一个质数,,如果n没有满足n%i==0,就不能为flag赋值为1,所以直到循环结束flag值都没有变化,都是0,所以当flag为零时就代表n是一个质数;
循环体只有红色部分,所以执行完循环体flag要么是0要么是1,没有其他情况的;不要把后面的printf语句也当做循环体了