#include<stdio.h>
int main()
{
int i = 0;
int num = 0;
printf("请您输入一个正整数:\n");
scanf("%d",&num);//输入num的值
for(i = 2;i < num; i++){//从i = 2开始循环取余
if(num % i == 0){
printf("您输入的这个数不是素数。\n");
break;//一旦满足num取余i,跳出循环
}
}
if(num == i){
printf("您输入的这个数是素数。\n");
}
return 0;
}
如图,我输入数字7:
输出完成
如图,我输入数字20:
扩展:在判断一个数是否为素数的前提下,我们如何判断一个范围内的所有素数,并将这个区间段内所有的素数输出,然后同时输出这个区间段内素数的个数呢?
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int num = 0;
for(num = 1;num < 200;num++){//定义遍历的范围
for(i = 2;i < num; i++){//从i = 2开始循环取余
if(num % i == 0){
break;//一旦满足num取余i,跳出循环
}
}
if(num == i){
printf("%d ",num);//条件满足时,将素数输出
j++;//每次满足条件时,j的个数加一
}
}
printf("\n素数的个数为:%d\n",j);//将素数的个数输出
return 0;
}
如图,为运行结果:
输出完成
更改遍历范围,将1~1000之间的素数全部输出:
输出完成
我们观察上面的代码,可以知道,遍历的范围是在写代码时就已经固定好了的,如果要更改区间段唯一的方法就是修改源代码中num的范围,并且我们无法得出输出所有素数的求和,那么我们如何能让用户决定素数输出的区间,并且可以得出用户输入任何区间段都能将这个区间段里面的所有素数的和求出来且表示出来呢?代码更改如下:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int num = 0;
int a = 0;//第一个区间值
int b = 0;//第二个区间值
int sum = 0;
int temp;//定义交换中间值
printf("请输入输出素数的区间:\n");
scanf("%d%d",&a,&b);//输入区间段的值
if(a>b){//交换算法,区间值应该是小数在前,大数在后,如果出现用户先将大数输入后输入小数,将两数调换位置,符合区间规则
temp = a;
a = b;
b = temp;
}
for(num = a;num < b;num++){//从输入的区间值开始遍历
for(i = 2;i < num; i++){//从i = 2开始循环取余
if(num % i == 0){
break;//一旦满足num取余i,跳出循环
}
}
if(num == i){
printf("%d ",num);//条件满足时,将素数输出
j++;//每次满足条件时,j的个数加一
sum += num;//满足条件时,将每一次输出的素数进行累加,赋值给sum
}
}
printf("\n素数的个数为:%d\n",j);//将素数的个数输出
printf("这个区间段内所有素数的和为:%d\n",sum);//将这个区间段内的所有素数和输出
return 0;
}
如图,我输入的区间段为1~100:
输出完成
如图我输入中间区间100~1000:
输出完成
那么如何将这个功能写进函数里面,在主函数里面随时调用呢?
#include<stdio.h>
int judge(int n)//判断是否为素数的函数
{
int i = 0;
int j = 0;
for(i = 2;i < n;i++){
if(n % i == 0){//满足取余等于零
j++;//非素数的个数加一
return 1;//返回值为1
}
}
if(j == 0 && n!=1){//当非素数的个数为零,且函数形参的值不为1;
return 2;//返回值为2;
}
}
int main()
{
int num = 0;
int sum = 0;
for(num = 1;num < 200;num++){//定义遍历范围
if((judge(num) == 2)){
sum = sum + num;
printf("%d ",num);//打印返回值为2的条件(素数条件)的所有数据
printf("%d\n",sum);//打印返回值为2的条件(素数条件)的所有数据的所有和
}
}
return 0;
}
如图为运行结果:
可以看出,遍历的范围为1~200,调用judge函数将这个区间段内的所有的素数输出,并且每一次输出素数的时候都进行一次累加,最终的4227就是这个区间段内所有素数的总和。
观察上述代码可以发现,函数共有两个返回值,返回值为1时代表的是非素数的情况,返回值为2则代表的是素数的情况,那么我们试试更改主函数中的返回值为1:
我将此时if条件判断语句中的语句更改为了:if((judge(num) == 1)),现在运行试试看:
从运行结果中不难看出,更改返回值,现在输出的是1~200区间段内所有的非素数及非素数的和。