判断输入是否为素数
素数为除了一和自己本身之外没有能够整除它的数,1不是素数
重点:
- 判断素数从2开始,for(i=2
- 判断一半即可i<=n/2;注意4,所以还要有等于
- 素数求和时,外循环内要使button=1;即变回1
- 求和,必然在循环内相加得sum值,输出语句在循环外
int main()
{
int n,i;
scanf("%d",&n);
//i必须由2开始,1是不能作为循环判断的起始值的,不然都不是素数了,由2开始循环
for(i=2;i<=n/2;i++)//素数判定,就是用每个比n小的数去整除n,如果出现可以整除的那必然不是咯
{
if(n%i==0)
{
printf("不是素数");
break;
}
}
//是素数的判断条件为循环走完了,没有出现任何一个数能整除他
printf("是素数");//很显然不合理,因为循环无论如何都会走到最后,终究会通过这个整除判断输出“是素数”
return 0;
}
因此判断素数必须要引用需要引入“开关”作为判断依据(理解为通过1和0去做判断)
int main()
{
int n,i;
int button=1;//素数必然要设置一个开关,通过开关去判断输出是否为
scanf("%d",&n);
//这里用n/2即可,因为整除了前一半即可知他是否为素数了,无需全部整除一遍,一半位置之后的有倍数2了。
for(i=2;i<=n/2;i++)
//注意一定是小于等于,当i为4时,判断2<2时,跳出循环。4不是素数,若写成小于则开关为1意味着4被当成了素数
{
if(n%i==0)
{
button=0;
break;//直接跳出for循环,比如6仅需判断2就可知不是素,无需判断到3
}
}
if(button==1)//无法被证伪,因此为真
{
printf("%d是素数",n);
}
else
printf("%d不是素数",n);
return 0;
}
输入大于3的数,求3~n之间所有素数和。
int main()
{
int n,i,a;
int sum=0;
scanf("%d",&n);
int button;
//因为是要求和
for(a=3;a<n;a++)//有个外循环让他从3走到n,因为每个数都要判断一遍嘛
{
button=1;//这里要让button回归为1,因为在下面if中button的值变为了0,若不重新赋值,始终为0
for(i=2;i<=a/2;i++)//内循环是对外循环来的数去做素数判定,由2开始判
{
if(a%i==0)
{
button=0;
break;
}
}
if(button==1)
{
sum+=a;
}
}
printf("所有素数求和为%d",sum);
return 0;
}
输入任意两数m和n,求m~n内所有素数的和
//输入任意两数m和n,求m~n内所有素数的和
int main()
{
int m,n,i,a;
int sum=0;
int cnt=0;
scanf("%d %d",&m,&n);
int button;
//1不是素数,故当你输入1开始时,我令他变为从2开始
if(m==1){
m=2;
}
for(a=m;a<n;a++)//有个外循环让他从m走到n,因为每个数都要判断一遍
{
button=1;//这里要让button回归为1,因为在下面if中button的值变为了0,若不重新赋值,始终为0
for(i=2;i<=a/2;i++)//内循环是对外循环来的数去做素数判定,由2开始判
{
if(a%i==0)
{
button=0;
break;
}
}
if(button==1)
{
cnt++;
sum+=a;
}
}
printf("%d个素数,所有素数求和为%d",cnt,sum);
return 0;
}