C语言 几种求素数的方法及对比 效率提升

本文探讨了求素数的几种方法,包括简单双重循环、基于平方根优化、减少sqrt函数调用以及排除偶数。通过逐步优化,算法效率从33秒提升到83毫秒,强调了算法优化在编程中的重要性。
摘要由CSDN通过智能技术生成

C语言 几种求素数(质数)的方法及对比

素数的概念为:“一个大于1 的自然数,除了1和其自身外,不能被其它任何自然数整除的数” ——本文将对几种求素数的方法进行对比,最终给出一种效率较高的算法,当前仍然停留在使用简单的双重for循环计算素数的小伙伴值得一看


我们将题目规定为求3到500000范围之内所有的素数,统计其个数。(素数数量过多,不要求输出,判断其为素数后统计数目即可)

简单粗暴法
  从3-500000范围内依次取出当前数i,遍历所有大于1小于i的数,如果没有数能够整除i,i即为素数。

实现代码如下
(goto语句为一种简单的跳转语句,可以将执行点跳转至指定的代码行,没有接触过的小伙伴可以自行百度了解更多)

#include "stdafx.h"
#include <time.h>
#include <math.h>

int _tmain(int argc, _TCHAR* argv[])
{
   
	int i = 0,j = 0,num = 0;
	int startTime = 0,endTime = 0;         //用于计算程序执行时间
	double sq = 0;
	startTime = clock();
	for(i=3;i<500000;++i){
   
		for(j=2;j<i;j++){
   
			if(i%j==0)
				goto Flag1;
		}
		num++;
Flag1:;
	}
	endTime = clock();
	printf("	运行时间%d\n	素数个数%d\n\n",endTime -</
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值