栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言笔记 —— 判断质数(普通,进阶)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言笔记 —— 判断质数(普通,进阶)

判断一个数是不是质数非常的简单,首先我们需要明白判断质数的逻辑,根据质数本身的定义,只能被1和自己本身整除的数,我们称之为质数,而2是最小的质数,因此最简单的逻辑实现,就是循环遍历2到我们想要判断的数之间的所有数,通过判断我们给定的数能否被遍历的数整除,最终决定他是否是质数,实现代码如下:

# include 

void main()
{
	int num = 0;
	scanf("%d", &num);
	printf("%d", num_is(num));
}
int num_is(int num)
{
	for (int i = 2; i < num; i++)
	{
		if (num % i == 0) return 0;
	}
	return 1;
}

此时,当我们输入的数为质数时,打印1,否则打印0,由此我们便完成了判断质数的逻辑,但假如,现在我们想要判断多个数是否为质数,如果我们想要求1000以内的所有质数,那其实也很简单,我们只要写一个2 - 1000的循环遍历 (2是最小的质数),每次调用一下我们写的这个函数就可以了,代码实现如下:

# include 

void main()
{
	int num = 1000;
	for (int i = 2; i <= num; i++)
	{
		if (num_is(i)) printf("%dn", i);
	}
}
int num_is(int num)
{
	for (int i = 2; i < num; i++)
	{
		if (num % i == 0) return 0;
	}
	return 1;
}

此时,我们便打印出了1000以内的所有质数了,但我们发现,此时,我们需要完成完整的两层for循环,是否可以做出一定的简化呢?

当然可以,如果我们已经知道了2是最小的质数,那么我们可以知道所有的2的倍数都不可能是质数,3是质数,那么3的所有的倍数也都不可能是质数了,接着到4,因为4是2的倍数,所以,4不是质数,因此我们可以定义一个数组,其大小由我们给定的要判断的数的数量而定,下标为我们要判断的数,而数组内通过0和1来标记该下标所对应的数是否为质数,实现代码如下:

# include 
# include 
int num_is(int num);
void main()
{
	int num = 1000;
	num_is(num);
}
int num_is(int num)
{
	int* arr = malloc((num+1)*sizeof(int));
	for (int i = 0; i <= num; i++)
		arr[i] = 1;
	for (int i = 2; i <= num; i++)
	{
		if (arr[i] == 1)
		{
			for (int j = i + i; j <= num; j += i)
				arr[j] = 0;
		}
	}
	for (int i = 2; i <= num; i++)
	{
		if (arr[i] == 1)
		{
			printf("%dn", i);
		}
			
	}
	free(arr);
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029983.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号