C语言 - 判断素数

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

定义:

素数(Prime number,又称质数),指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数

思路一:试除法

1.如果数字 i 能被 2 ~ i-1 整除,说明 i 就是素数

代码(V1):

#include<stdio.h>
int main()
{
	int i = 0;
	//统计素数个数
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		//flag为1表示是素数
		int flag = 1;
		int j = 0;
		//产生2~i-1的整数
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				flag = 0;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount=%d\n", count);
	return 0;
}

2.上述代码可进行优化,我们试除的范围是2 ~ i-1,但实际上从 i/2 ~ i-1之间的数是多余的,因为如果一个数不能被3整除,那么它一定不能被6整除,优化后的范围为[i/2,i-1],工作量减小一半

代码(V2):

include<stdio.h>
int main()
{
	int i = 0;
	//统计素数个数
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		//flag为1表示是素数
		int flag = 1;
		int j = 0;
		//产生2~i/2的整数
		for (j = 2; j <= i/2; j++)
		{
			if (i % j == 0)
			{
				flag = 0;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount=%d\n", count);
	return 0;
}

3.继续进行优化,如果数字 i 可以写成 i = a × b,那么说明a和中至少有一个数字是<= 开平方 i 的,若能在 2 ~ 开平方i 之间有一个数能整除i,那么说明后面也有一个数能整除i,否则就说明后面也不可能有一个数能整除i

代码(V3):

#include<stdio.h>
#include<math.h>
int main()
{
	int i = 0;
	//统计素数个数
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		//flag为1表示是素数
		int flag = 1;
		int j = 0;
		//产生2~开平方i的整数
		for (j = 2; j <= sqrt(i); j++)
		{
			if (i % j == 0)
			{
				flag = 0;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount=%d\n", count);
	return 0;
}

4.在上述优化基础上,我们知道偶数不可能是素数,因此还可以优化

代码(V4):

#include<stdio.h>
#include<math.h>
int main()
{
	int i = 0;
	//统计素数个数
	int count = 0;
	//只统计范围内奇数中素数个数
	for (i = 101; i <= 200; i+=2)
	{
		//flag为1表示是素数
		int flag = 1;
		int j = 0;
		//产生2~开平方i的整数
		for (j = 2; j <= sqrt(i); j++)
		{
			if (i % j == 0)
			{
				flag = 0;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount=%d\n", count);
	return 0;
}

运行结果:

C语言 - 判断素数

 文章来源地址https://www.toymoban.com/news/detail-511577.html

思路二:筛法

最小的素数是2,我们先去除所有能被2整除的数,此时素数是3,去掉所有能被3整除的数,以此类推,如思路一v3所述,只需要在数组元素的值小于等于所求的最大范围i的开平方时进行此操作即可,去掉所有小于等于开平方i的所有数的倍数,剩下的数就是素数

C语言 - 判断素数

 代码:

#include<stdio.h>
#include<math.h>
int main()
{
	int i = 0;
	int arr[200] = { 0 };
	//统计素数个数
	int count = 0;
	//将2~200的数放入数组中
	for (i = 0; i < 200; i++)
	{
		arr[i] = i + 2;
	}
	int j = 0;
	//当数组元素小于开平方i才进入循环
	while (arr[j] <= sqrt(200))
	{
		//遍历数组元素,数组首元素为素数2,下标为0,作为除数
		//那么首个被除数应该从下标为1的数3开始向后遍历
		for (i = j + 1; i < 200; i++)
		{
			//将能被素数整除的数组元素置为0
			if (arr[i] % arr[j] == 0)
			{
				arr[i] = 0;
			}
		}
		j++;
		//此时被置为0的数都不是素数,无需判断
		while (arr[j] == 0)
		{
			j++;
		}
	}
	for (i = 98; i < 200; i++)
	{
		//在上述操作执行结束后,只有尚未被置0的数才是素数
		if (arr[i] != 0)
		{
			count++;
			printf("%d ", arr[i]);
		}
	}
	printf("\ncount=%d\n", count);
	return 0;
}

运行结果:

C语言 - 判断素数

 

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

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

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

相关文章

  • 【C语言】判断一个数是否为素数

    目录 判断一个数是否为素数 方法1  方法2    2.1 2.2 进阶:输出区间长度内的素数 “ 素数和质数没有区别 ,素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。比1大但不是素数的数称为合数,1和0既非素数也非合数。” 所谓素数

    2024年02月04日
    浏览(54)
  • (c语言)素数判断的四种方法

    2024年02月04日
    浏览(29)
  • 【C语言】C语言实现一个函数 判断是否是素数

           欢迎来到南方有乔木的博客!!! 博主主页: 点击点击!戳一戳!! 博主QQ: 1636758318 博主简介: 一名在校大学生,正在努力学习Java语言编程。 穷且意坚,不坠青云之志 ,希望能在编程的世界里找到属于自己的光。 跪谢帅气or美丽的朋友们能够帮我点赞! 请对文中

    2024年02月04日
    浏览(72)
  • C语言中判断素数的几种方法

    作为C的初学者们希望大家看看这几种判断素数的方法 既然进来了就看完把 题目要求: 判断n是否为素数。 首先我们讲一下素数的判定:素数就是只能被1或者本身整除的数,这就延伸出了几种不同的判定方法。 方法一:因为判断素数相当于就是判断这个数能不能整除2-这个数

    2024年02月11日
    浏览(35)
  • C语言素数(质数)判断的三种方法

    本文介绍了判断素数的3种方法,从素数的概念分析,确定找到素数的几个必要条件,设计思路,并将代码进行优化。此外,还使用自定义函数的形式将同样的思路进行实现。 素数,就是仅能被自身和1整除的数字。 首先我们可以提取出判断素数的三个基本条件: 素数是整数

    2024年02月04日
    浏览(33)
  • 超级详细用C语言判断一个数是否是素数

    先上代码: #include stdio.h int main() {         int n,i;     printf(\\\"请输入一个数: \\\");     scanf(\\\"%d\\\",n);     for(i=2;in;i++){         if(n%i==0){             break;         }     }     if(n==i){         printf(\\\"是素数\\\");     }     else         printf(\\\"不是素数\\\"); } 理解: 素数

    2024年02月08日
    浏览(80)
  • C语言--输入一个数判断是否为素数(多种方法)

     需要解决这个问题,首先我们要明白 --------什么是素数? (质数)素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 举个例子:4  可以 由2*2=4  和1*4 得到,不符合素数的条件,所以不是素数。                   5  只能由1*5 得到,符合素数的

    2024年01月25日
    浏览(40)
  • C语言:判断一个数是否为素数(3种方法,含注释)

    首先要先明白素数的定义:除了1和本身之外,没有其他的因数的数,即不能被其他数整除。 同时要注意,1不是素数。 以下为判断素数的3个代码: 1.要注意给m赋初值是不能为1,因为1是任何数的因数,可以被任何数整除。若初值为1,则第一步就结束循环,所有的数输出结果

    2024年02月13日
    浏览(35)
  • C语言判断一个数是否为素数的三种方法(详细)

             今天我们来使用C语言来实现判断一个数是否为素数,首先我们需要了解到素数的概念,素数就是只能被1和它本身整除的数。             这是第一种代码,我们来分析一下,首先创建变量i和n,这里我们i用于循环,n用来存放我们输入的数字。之后我们设置一个

    2024年04月25日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包