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;
}

结果:

相关推荐
乘浪初心1 小时前
python调用API接口,免费API调取,学习如何调取API接口并反馈你输入的内容
开发语言·python·api·免费
AI玫瑰助手1 小时前
Python模块:import导入模块与模块的搜索路径
android·开发语言·python
傻啦嘿哟1 小时前
一篇文章讲清楚Python的变量作用域
开发语言·python
devilnumber1 小时前
Java 二分查找(二分算法)详解 + 实战运用 + 核心坑点
java·开发语言·算法
尘汐筠竹1 小时前
Day1-2 学习笔记:在 AMD 云环境上部署 Gemma 4 大模型
笔记·学习·datawhale·amdev
Litluecat1 小时前
配合多角色提示语4,学习AI漫剧(刚开始学)
人工智能·学习·计算机视觉
ch.ju1 小时前
Java程序设计(第3版)第四章——重载和覆盖的区别
java·开发语言
AOwhisky1 小时前
学习自测与解析:Redis系列第一期与第二期核心知识点详解
运维·数据库·redis·学习·云计算
AI科技星2 小时前
第四卷:橡皮泥江湖(拓扑学)
c语言·开发语言·网络·量子计算·agi·拓扑学