C语言刷题函数1-判断素数(分支语句,函数两种方法)

题目要求:判断100-200之间的素数。

一.素数定义

素数(质数)是指大于1的自然数,除了1和它本身之外,不能被其他自然数整除。

二.基本算法:试除法

判断一个数n是否为素数,只需检查2到n-i是否有n的因子。

因子:若整数 a / b 能整除、没余数,b 就是 a 的因子(因数)。

本题代码:(分支语句)

复制代码
#include <stdio.h>
int main()
{
	int i = 0;
	//遍历100-200之间的所有数字
	for (i = 100; i <= 200; i++)
	{
		//判断i是否是素数?
		//产生2到i-1之间的数字。


		int flag = 1;//标记素数,1是素数,0不是素数,先假设i是素数。
		int j = 0;
		//试除法
		for (j = 2; j <= i - 1; j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
			
		}
		
		if (flag == 1)
		{
			printf("%d ",i);
		}

	}
	return 0;
}

三.优化

优化1:偶数一定不是素数:

for(int i = 100;i < =200;i++) --> for(int i = 101;i <= 200;i +=2)。

优化2:只需检查根号n。--> 用sqrt(平方根)函数,需要调用头文件<math.h>。

因为如果n有因子,至少有一个因子≤√n。否则两个因子都大于√n,乘积就会大于n,矛盾。

代码:

复制代码
#include <stdio.h>
#include <math.h>
int main()
{
	int i = 0;
	for (i = 101; i <= 200; i += 2)//偶数一定不是素数
	{
		//判断i是否是素数?
		//产生2到i-1之间的数字。
		int flag = 1;//假设i是素数
		int j = 0;
		//sqrt是计算平方根 --> 要调用头文件<math.h>
		for (j = 2; j <= sqrt(i); j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}

		}

		if (flag == 1)
		{
			printf("%d ", i);
		}

	}
	return 0;
}

运行结果:

四.函数封装(思路与上面几乎一样)

代码:

复制代码
#include <stdio.h>
#include<math.h>

int IsPrime(int n)//判断素数
{
	int j = 0;
	int flag = 1;//假设i是素数

	//试除
	for (j = 2; j < sqrt(n); j++)
	{
		if (n % j == 0)
		{
			return 0;//不是素数,返回0。
		}
	}
	return 1;//是素数,返回1。
}

int main()
{
	//遍历所有待查数字。
	for (int i = 101; i <= 200; i+= 2)
	{
		int ret = IsPrime(i);//调用函数
		//打印结果
		if (ret == 1)
		{
			printf("%d是素数\n",i);
		}
		
	}
	return 0;
}

结果:

相关推荐
懂点Tech14 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
云和数据.ChenGuang14 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
小向是个Der14 小时前
嵌入式进阶——MCU上电后的动作
c语言·单片机·mcu·学习·链接脚本
美狐美颜SDK开放平台15 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq042415 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘5615 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
码匠许师傅16 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅16 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
bkspiderx17 小时前
基于Socket的广播通信及C语言实现详解
c语言·开发语言·socket·广播·socket的广播通信
小王C语言17 小时前
Qt常用控件:输入类控件,单行/多行输入框、下拉框、(日期)微调框、旋钮、滑动条
开发语言·qt