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

结果:

相关推荐
djjjx.3 小时前
【 C++ 】多态
开发语言·c++·多态
夜雪一千3 小时前
Python如何使用XPath定位没有特征的元素?无id、无class通用定位技巧
开发语言·python
艾莉丝努力练剑3 小时前
【QT:解决问题】Qt5Core.dll:无法定位程序输入点
java·开发语言·qt·学习·面试
流浪0014 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·python
光影少年4 小时前
react离线缓存、图片缓存方案
开发语言·前端·javascript·react native·react.js·缓存·前端框架
SomeB1oody4 小时前
【RustyML入门】3.7. 循环层
开发语言·后端·机器学习·rust·教程
言乐67 小时前
Python游戏水平测试辅助系统
开发语言·python·游戏·django·pygame
青山是哪个青山12 小时前
LangChain 学习笔记(四):Message 与提示词模板
笔记·学习·langchain
hsjiasb13 小时前
FreeRTOS学习(二十六)——动态内存管理heap_1到heap_5
stm32·单片机·学习·学习笔记·freertos
崇子嵘13 小时前
基于zynqMP15eg的linux驱动学习
学习