C语言 | 素数求解

这篇具有很好参考价值的文章主要介绍了C语言 | 素数求解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、什么是素数

方法1、基础求解(逐个试除)

算法优化

方法2、利用平方根求解

总结

提示:关于for循环


1、什么是素数

 求素数,首先我们要知道什么是素数,这是我在百度百科上找的关于素数的定义。素数就是只能被1和自身整除的正整数。for循环求1~100的素数编程,C语言,原创,c语言,算法 2、C语言实现找素数

  我们已经知道什么是素数了,那接下里我们就用C语言来实现,判断一个数是不是素数。
  我们以100~200为例子。

方法1、基础求解(逐个试除)

试除法就是把在该数之前的数都拿来除一遍,如过有余数为0,则不是素数。

代码及运行结果如下:

#include<stdio.h>
int main()
{
	int a = 200;
	int i = 0;
	int j = 0;
	int count = 0;
	//100~200遍历
	for (i = 2; i <= a; i++)
	{
		//设置标记
		int flag = 1;
		//逐个试除
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				//余数为0,标记改变
				flag = 0;
				break;
			}
		}
		//if语句非0为真,查看标记是否改变
		if (flag)
		{
			//统计个数
			count++;
			//打印素数
			printf("%d ", i);
		}
	}
	printf("\n总共有%d个", count);
	return 0;
}

for循环求1~100的素数编程,C语言,原创,c语言,算法

算法优化

我们知道,除了2这个数,其他素数都是奇数,那我们就用判断奇数就行(如果计算包含2,记得把2带上)。

另外算到该数的1/2的时候就能判断出该数不是素数,那就没必要往后再算。

优化代码及运行结果如下:

#include<stdio.h>
int main()
{
	int a = 200;
	int i = 0;
	int j = 0;
	int count = 0;
	//从101开始,每次自增2,遍历奇数
	for (i = 101; i <= a; i+=2) 
	{
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				//余数为0跳出循环
				break;
			}
			//大于或等于该数的1/2则为质数
			if (j >= i / 2)
			{
				count++;
				printf("%d ", i);
				break;
			}
		}
	}
	//打印个数 
	printf("\n总共有%d个", count);
	return 0;
}

for循环求1~100的素数编程,C语言,原创,c语言,算法

 方法2、利用平方根求解

一个数m能够写成a*b的方式的时候,a和b中至少有一个数字是小于等于m开平方的
例子:
16 = 2 * 8 = 4 * 4 ;  2<4  4<=√16
36 = 4 * 9 = 6 * 6;   4<6  6<=√36
32 = 4 * 8  ;4 < √32

所以说,能在开平方之前找到一个因子,那一定也能在开平方后面找到因子;反之,开平方前面找不到一个因子,那在开平方后面也一定找不到因子

那我们每次计算,只需要试除到开平方m之前就行 

代码及运行结果如下:

#include<stdio.h>
#include<math.h>
int main()
{
	int a = 200;
	int i = 0;
	int j = 0;
	int count = 0;
	//遍历3~100之间的奇数
	for (i = 101; i <= a; i+=2)
	{
		//设置标记
		int flag = 1;
		//试除开平方之前的数
		//sqrt为开平方的库函数,需包含<math.h>的头文件
		for (j = 2; j <= sqrt(i); j++)
		{
			if (i % j == 0)
			{
				//余数为0,标记改变
				flag = 0;
				break;
			}
		}
		//if语句非0为真,查看标记是否改变
		if (flag)
		{
			//统计个数
			count++;
			//打印素数
			printf("%d ", i);
		}
	}
	printf("\n有%d个素数", count);
}

for循环求1~100的素数编程,C语言,原创,c语言,算法

 这样就大大的减少了运算的次数,提高了效率,到这里也不妨看一下每种方法计算次数。

for循环求1~100的素数编程,C语言,原创,c语言,算法

 总结

  代码通过一点一点的改良,我们可以明显看出,运算次数的减少。不要局限于固定思维,多看多学好的代码风格和代码,对自己提升更有帮助,希望这篇文章对大伙有帮助,看到这里了,不妨点个赞再走,哈哈,日后还会陆续更新文章,诚邀各位观看指点!

提示:关于for循环

写法1是C语言的写法,写法2是C++的写法,当然这并不冲突。但建议我们在写C的时候,还是按照C的写法来。for循环求1~100的素数编程,C语言,原创,c语言,算法文章来源地址https://www.toymoban.com/news/detail-784527.html

到了这里,关于C语言 | 素数求解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [C语言]输出100以内的所有素数(质数)

    概念解读 : 质数又被称为素数,是指一个大于1的自然数,除了1和它自身外,不能被其它自然数整除,且其个数是无穷的。 思路分析: 对于代码大方向,我们可以直接主函数中写,也可以用可移植性高的自定义函数来写。 100以内样例输出示意 2 3 5 7 11 13 17 19 23 29 31 37 41 43

    2024年02月11日
    浏览(36)
  • C语言 五种方法输出100以内的素数(质数) 源码

    目录   写在前面: 输出前20万个素数,对比简单遍历和欧拉筛选的运行时间。 简单遍历: 欧拉筛选: 一、简单遍历 二、遍历至该数的平方根       三、用x/i来代替sqrt(x) 四、朴素筛法 五、埃式筛法 六、欧拉筛法           简单遍历: 3.243秒 欧拉筛选: 0.353秒     

    2024年02月05日
    浏览(27)
  • C语言:写一个代码,使用 试除法 打印100~200之间的素数(质数)

    使用 试除法 打印100~200之间 的 素数 。                素数(质数) : 一个数 只能被写成 一和本身的积 。 如: 7 只能写成 1*7 ,那就是素数(质数)了。                       =========================================================================                         (一)

    2024年02月08日
    浏览(59)
  • for循环的输出控制(输出1-100中的奇数、偶数、倍数以及公倍数)

    一、输出1-100中所有的奇数: i = 1 while i = 100:     if i%2 == 1:         print(i)     i += 1   法二: for i in range(1,101):     if i%2 == 1:         print(i)   法三: for i in range(1,101,2):     print(i)     二、输出1-100中所有的偶数: for i in range(1,101):     if i % 2 == 0:         print(i)   三、

    2024年02月08日
    浏览(29)
  • 多目标粒子群算法求解帕累托前沿Pareto,Pareto的原理,测试函数100种求解之21

    目录 背影 parte前沿的定义 注意事项 基于多目标粒子群的帕累托前沿求解 主要参数 MATLAB代码 效果图 结果分析 展望 在目标优化过程种,很多时候都两个或者多个目标,并且目标函数不能同时达到最优,鱼与熊掌不可兼得,这个时候可以通过求解帕累托前沿,通过帕累托前沿

    2024年02月11日
    浏览(31)
  • 【Java编程教程】详解 Java for 循环语句

    Java for 循环用于多次迭代程序的一部分。如果迭代次数固定,建议使用for循环。 Java 中有三种类型的 for 循环。   简单的 for 循环 For-each或增强型 for 循环 标记为循环 一个简单的 for 循环与C / C++相同。我们可以初始化变量,检查条件和递增/递减值。它由四个部分组成: 初始

    2024年02月08日
    浏览(38)
  • Linux shell编程学习笔记17:for循环语句

    Linux Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、字符串、文件测试等多种运算,同样也需要进行根据条件进行流程控制,提供了if、for、while、until等语句。  之前我们探讨了if语句,现在我们来探讨for循环语句。 Linux Shell中的for语句十分灵活,格式多样,我

    2024年02月06日
    浏览(33)
  • 【C语言初学必看】一知半解的for循环嵌套for循环

     初学C语言,常常遇到for循环中嵌套个for循环,初学者对于这种形式总是一知半解,这次我就整理了常见的for循环嵌套for循环的题目,我们一起争取一举拿下这类题。学废他们,以后再见到就不怕啦!每天都要学一点呀。加油,奋斗的我们! 💪💪💪 目录⛳ 🔥🚀前言+目录

    2024年02月02日
    浏览(32)
  • 【C语言】循环语句for

    这一节来深入理解一下for循环语句的使用 for(初始化;判断条件;调整) 分析代码: 创建变量i for循环语句的初始化为i=1,说明i从1开始循环 判断部分为i=10,直到i10时跳出循环 调整部分为i++,每循环一次I+1 此代码结果为打印1-10这10个数字 源代码 与上节循环语句while中bre

    2024年02月05日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包