首页 > 其他分享 >质数和约数

质数和约数

时间:2023-07-14 11:57:15浏览次数:40  
标签:约数 遇到 int 质数 times 筛掉

第一部分 质数的判定

试除法

思想:

要检验一个数字 \(n\) 是否为质数,将 \(n\) 除以 \(1\sim \sqrt n\),如果有一个数字刚好整除 \(n\),那么 \(n\) 为合数,否则 \(n\) 为奇数。

代码:

bool prime(int x) {
    if (x < 2) return false;
	for (int i = 2; i <= x / i; i++) {
		if (x % i == 0) {
			return false;
		}
	}
	return true;
}

埃氏筛

思想:

埃氏筛直接利用质数的定义。

我们易知一个数 \(x\) 的 \(n\) 倍一定是一个合数,

那么我们遇到一个质数时 \(x\),我们可以把它的倍数 \(x \times n\) 全部标记为不是质数。

例:

遇到质数 \(2\)(绿色):

image

遇到质数 \(3\)(红色):

image

遇到质数 \(5\)(橙色):

image

遇到质数 \(7\)(蓝色):

image

等等。

我们还有一些优化:

  1. 我们遇到质数 \(x\),可以直接从 \(x \times x\) 开始划,因为前面的 \(x \times i\) 已经被更小的质数筛掉了,比如 \(20\) 通过 \(5 \times 4\) 筛掉,但早已经通过 \(2 \times 10\) 筛掉了。

  2. 我们可以只枚举 \(1 \sim \sqrt n\),道理与试除法相同。

代码:

标签:约数,遇到,int,质数,times,筛掉
From: https://www.cnblogs.com/PlayWithCPP/p/17553326.html

相关文章

  • 求质数:204. 计数质数
    https://leetcode.cn/problems/count-primes/204给定整数n,返回所有小于非负整数n的质数的数量。示例1:输入:n=10输出:4解释:小于10的质数一共有4个,它们是2,3,5,7。这题如果用对每个数i,让j从2遍历至sqrt(i)是否存在j,使得i%j==0(被j整除),是最容易的想到的,......
  • 最大公约数和最小公倍数的解法
    最大公约数和最小公倍数的解法什么是最大公约数和最小公倍数?最大公约数(GreatestCommonDivisor,GCD)是指两个或多个整数共有约数中最大的一个。例如,12和18的最大公约数是6,因为它们都可以被6整除,而且没有比6更大的约数。最小公倍数(LeastCommonMultiple,LCM)是指两个或多......
  • LeetCode/和等于目标值的质数对
    给你一个整数n,如果两个整数x和y满足下述条件,则认为二者形成一个质数对:1<=x<=y<=nx+y==nx和y都是质数请你以二维有序列表的形式返回符合题目要求的所有[xi,yi],列表需要按xi的非递减顺序排序。如果不存在符合要求的质数对,则返回一个空数组。1.埃氏筛预......
  • 求最大公约数
    求最大公约数枚举法publicclassDemo3_01{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);intleft=scanner.nextInt();intright=scanner.nextInt();intresult=1;for(int......
  • 【视频】R语言LDA线性判别、QDA二次判别分析分类葡萄酒品质数据
    全文链接:https://tecdat.cn/?p=33031原文出处:拓端数据部落公众号分析师:DongleiNiu判别分析(Discriminantanalysis)是一种统计分析方法,旨在通过将一组对象(例如观察数据)分类到已知类别的组中,来发现不同组之间的差异。什么是判别分析判别分析有两种主要形式:线性判别分析(LDA)和......
  • 最大公约数和最小公倍数
    #求最大公约数86最大公约数是2deffun_gongyue(p,q):temp=p%q#2whiletemp!=0:p=q#6q=temp#q=2temp=p%q#0returnqprint(fun_gongyue(6,8))#求最小公倍数两数乘积/最大公约数d......
  • 分治/质因数分解 POJ1845 求pow(a, b)的所有约数之和
    //POJ1845求pow(a,b)的所有约数之和//方法:1,分解质因数,将a分解成p1^k1*p2^k2^...*pn^kn//2,那么pow(a,b)为p1^(k1*b)*p2^(k2*b)^...*pn^(kn*b)//3,对于单独的pi^(ki*b),他所有的约数为(1,pi,pi^2,pi^3.....pi^(ki*b));//4,那么整个式子来说,pow(a,......
  • Python 求最大公约数
    题目要求求最大公约最简单快速的方式还是欧几里得算法原理:已知m、n两个不全为0的非负整数gcd(m,n)1:如果n=0,返回m作为结果,否则进入22:m对n取余,余数赋值给r3:将n赋值给m,r赋值给n,返回1参考实现defgcd(m,n):'''求最大公约数:paramm::paramn::ret......
  • 回文质数(快速求出一个区间内的所有回文数)
    题目链接:回文质数code:#include<bits/stdc++.h>usingnamespacestd;vector<int>constructPalindromes(intstart,intend){vector<int>palindromes;if(start<=1){palindromes.push_back(1);start=2;}intstartLen=......
  • 题解 P4108【[HEOI2015]公约数数列】
    看到这种奇怪的操作,首先想到分块。以下记值域为\(w\),块长为\(B\)。前缀\(\gcd\)显然单调不增,而且后一个必须是前一个的因数,如果变化至少要减半。因此,我们知道,共有\(\mathcalO(\logw)\)个不同的前缀\(\gcd\)。我们可以接受对这些块暴力,只需要对前缀\(\gcd\)都相同的块......