Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >万人千题——素数筛选

万人千题——素数筛选

作者头像
秋名山码神
发布于 2022-12-13 06:22:05
发布于 2022-12-13 06:22:05
24300
代码可运行
举报
文章被收录于专栏:码神随笔码神随笔
运行总次数:0
代码可运行

一个题用英雄哥博客中写的方法就能解决,所以说完成起来还是比较简单的。 计数质数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool f[50001];
#define ll long long;
bool isPrime(int x)
{
	for (int i = 2; i*i <= x; ++i)
	{
		if (x%i == 0)
			return false;
	}
	return true;
}
int countPrimes(int n)
{
	int ans = 0;
	for (int i = 2; i < n; ++i)
	{
		int ans = 0;
		for (int i = 2; i < n; ++i)
		{
			ans += isPrime(i);
		}
	}

	return ans;

}

暴力解法,看图吧

还是要优化,首先分析为什么超时,发现主要的原因是从2开始每一个数都进行了素数的判断,所以说浪费了时间,在上一篇素数的判断,我们提到可以使素数*相同的倍数,来减少判断的次数。 从而引出了Eratosthenes筛选

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;

bool f[50001];
int countPrimes(int n)
{
	int i;
	int cnt = 0;
	ll j;
	f[0] = f[1] = 1;
	for (i = 2; i < n; ++i)
	{
		if (!f[i])
		{
			++cnt;
			for (j = (ll)i*i; j < n; j += i)
			{
				f[j] = 1;
			}
		}
	}
	return cnt;
}
int main()
{
	cout<<countPrimes(10);
	return 0;
}

看似俩个for循环,虽然有两个嵌套的轮询,但是第二一个轮询只有在i是素数的时候才会执行,而且随着i的增大,它的倍数会越来越少,所以整个算法的时间复杂度并不是O(n2),且远远小于O(n2)。 从而实现了时间的减少,

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
客户端基本不用的算法系列:素数筛法
今天的内容实用而且简单!素数问题是从来都是数学家热衷探索的领域,也是程序设计竞赛和 LC 中,解决数论相关问题的基础,下面本文介绍如何更科学地筛素数和一些相关的小知识。
用户2932962
2019/12/22
1.7K0
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
简介:数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
GeekLiHua
2025/01/21
810
三种素数筛的比较
在自然数集中,质数的数量不多而且分布比较稀疏,对于一个整数N,不超过N的质数大概有N/lnN个,即每lnN个数中可能会有一个质数。
ACM算法日常
2018/12/13
1.4K0
「2017 Multi-University Training Contest 7」2017多校训练7
1002 Build a tree(递归) 题目链接 HDU6121 Build a tree image.png #include<bits/stdc++.h> #define ll long long using namespace std; ll n,k; int t,D; ll f[64],siz[64],tot[64]; void init(){ D=1; for(ll c=n-1;c;c=(c-1)/k)f[D++]=c; reverse(f+1,f+D); s
饶文津
2020/06/02
2730
「2017 Multi-University Training Contest 7」2017多校训练7
世界总决赛选手带你玩转数论 1——素数及素性检测
笔者曾获得 ICPC 2020 世界总决赛资格,ICPC 2020 亚洲区域总决赛第五名。
ACM算法日常
2021/06/16
8730
204. 计数质数
解1:小学数学没有学好,先来一下质数定义。质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。暴力拆解,时间复杂度达不到,数很大时,耗时长。看解2。
张伦聪zhangluncong
2022/10/26
6140
2019年安徽大学ACM/ICPC实验室新生赛
A.素数分布函数\pi (n)π(n)表示小于或等于n的素数的数目。例如\pi (10)=4π(10)=4(2,3,5,7是素数)。这个函数涉及到许多高等数论的内容,甚至和黎曼猜想挂钩,目前还有很多数学家正在不断探索其中的奥秘。千里之行始于足下,现在你开始关心一个问题:在正整数域中素数的分布是怎么样的。为了探索这个问题,你需要计算出一些\pi (n)π(n)的值。
杨鹏伟
2020/09/11
6600
基础数论总结
从右往左。可以一直递推,然后到最后一项,然后快速幂求矩阵,矩阵最终的结果就是所求结果。更新:java的矩阵通用乘法可以表示为,可以将下列代码替换道ac代码中:
bigsai
2019/09/24
7470
基础数论总结
java素数筛选法
判断是否为素数 对于一个任意一个正整数,如果它只能被自身或1整除,称其为素数,否则为合数。1比较特殊,既不是质数也不是合数。
lexingsen
2022/02/24
5650
java素数筛选法
Codeforces 的题目真的值得算法竞赛选手训练吗?
个串,有两种操作,一种是给某个串加一个字符,另一种是求存不存在一个串是查询串的子串。强制在线。
ACM算法日常
2021/11/10
9530
LightOJ - 1197 区间素数筛模版
给t给样例,每个样例a,b两个数,求区间[a,b]内素数的个数,(1 ≤ a ≤ b < 2^31, b - a ≤ 100000).
用户2965768
2019/08/01
2720
【小码匠自习室】重做ABC250-D, 我无力反抗
Let us regard an integer k as "similar to 250" if the following condition is satisfied:
小码匠
2022/08/08
4510
小小码民前来刷题——万人千题
今天聊啥呢?想了一下最近好像什么也没有做,就刷题了,力扣,洛谷,算法导论,啥都刷,那么我就来给各位彦祖分享一下最近刷题的心得,及我刷题过程中感觉对我有一定价值的题吧。
秋名山码神
2022/12/13
1660
小小码民前来刷题——万人千题
五分钟小知识:如何用算法高效寻找素数?
不要觉得素数的定义简单,恐怕没多少人真的能把素数相关的算法写得高效。本文就主要聊这样一个函数:
五分钟学算法
2019/10/09
4570
五分钟小知识:如何用算法高效寻找素数?
求素数个数
本文讲述如何通过修改求素数的方法,使得在 n<=10^9 范围内,求前 n 个素数之和的算法的时间复杂度低于 2^32。首先介绍经典求素数方法,然后给出新算法的实现,并对比不同算法的时间复杂度。
高爽
2017/12/28
1.3K0
求素数个数
Java实现质数筛的三种方法
今天在做一个算法题的时候遇到一个需要求质数的情况,但是本人比较菜只会暴力做法,所以在此记录学习一下质数筛选除了暴力以外的其它做法!
才疏学浅的木子
2023/10/17
3660
Java实现质数筛的三种方法
素数筛法(Eratosthenes筛法)
Eratosthenes筛法,又名埃氏筛法,对于求1~n区间内的素数,时间复杂度为n log n,对于10^6^ 以内的数比较合适,再超出此范围的就不建议用该方法了。 筛法的思想特别简单: 对于不超过n的每个非负整数p, 删除2p, 3p, 4p,…, 当处理完所有数之后, 还没有被删除的就是素数。
_DIY
2019/09/11
1.7K0
面试官问小灰:如何用程序判断质数?
设 c 为一个合数,令 x 为 c 的最小非 1 因数,令 ,显然 。
小灰
2022/09/01
9700
面试官问小灰:如何用程序判断质数?
《程序员数学:筛选素数》—— 如何计算100内的素数?
源码:https://github.com/fuzhengwei/java-algorithms
小傅哥
2022/12/13
7240
《程序员数学:筛选素数》—— 如何计算100内的素数?
C/C++中的素数判定
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 🥭本文内容:C/C++中的素数判定 更多内容请见👇 C/C++中的基础数据类型 C与C++的最常用输入输出方式对比 C语言竟支持这些操作:C语言神奇程序分享 ---- 本文目录 1.什么是素数 2.素数的两种判断方法 2.1 暴力法 2.1.1 从 2 到 √n 2.1.2 6n-1与6n+1 2.2 筛法 2.2.1 埃
小嗷犬
2022/11/15
8330
C/C++中的素数判定
相关推荐
客户端基本不用的算法系列:素数筛法
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验