首页 > 其他分享 >C - 素数密度

C - 素数密度

时间:2023-03-31 21:01:11浏览次数:42  
标签:题解 代码 long 素数 密度 质数

题解在代码里,如下

点击查看代码
#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
//如果一个数n不是质数,就一定有非一的因数x<=sqrt(n); 
const int N=5e4; //因为所给题目最大到(1<<31) 所以只需要求出来 1~N之间的所有质数就行 
const int M=1e6+7;
int idx=0;
bool prime[N]; 
int p[N], tot;
int ma[M]; //离散化标记 L~R的合数  
void init(){//欧拉筛 
;
    for(int i = 2; i < N; i ++) prime[i] = true;//w++;
    for(int i = 2; i < N; i++){
        if(prime[i]) p[tot ++] = i;
        for(int j = 0; j < tot && i * p[j] < N; j++){
            prime[i * p[j]] = false;// w++;
            if(i % p[j] == 0) break; //w++;
        }
    }
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	init();
	int  ans=0;
	int  l,r,w;
	ma[1]=1; //1 特殊标记 
	cin>>l>>r;
	for(int j=0;j<tot&&p[j]<=sqrt(r);j++) //枚举1~N之间的所有质数 
	{
		 w=(p[j]-l%p[j])%p[j];  //这里的w表示(l+w)%p[j]==0; 
		 if(l+w==p[j])// 这里是l+w刚好等于p[j] ,一倍为质数 
		 w+=p[j]; //所以加一倍 ,为二倍的合数 
		for(long long  i=l+w;i<=r;i+=p[j]) //l+w表示质数p[j]的二倍 ,每次增加一倍 ,把L~R之间所有的p[j] 的倍数标记 
		{
			ma[i%M]=1; //因为所给区间最多为1e6,且递增每次加一,所以modM离散化后,一一对应不会重复 
		}
	}
	for(LL i=l;i<=r;i++) //一一枚举就行 ,这里i开long long ,防止 r=1<<31时 ,再i++ 爆int  
	{
		if(ma[i%M]==0)
		{
			ans++;
		} 
	}
	cout<<ans<<endl;
	return 0;
 } 

标签:题解,代码,long,素数,密度,质数
From: https://www.cnblogs.com/xxj112/p/17277464.html

相关文章

  • 欧拉筛法求素数
    在开筛之前,我们要理解一个很好理解的概念,任何一个合数可以拆成一个最小素数和另一个数(可能质数可能合数)的乘积这个最小素数即为这个合数的最小质因子//比如12=2*6,此时2就是12的最小质因子,当然亦有12=3*4,可以看到3也是12的质因子,但不是最小的质因子//而且,对于一合数a=b*q,b为a的最......
  • 素数环
    #include<cstdio>#include<iostream>#include<cstring>usingnamespacestd;boolisprime[40];//用于判断是否为素数boolisused[20];//用于判断是否重复使用。i......
  • C01素数之和
    publicclassA01素数之和{publicstaticvoidmain(String[]args){intsum=0;//累加求和for(inti=2;i<=100;i++){if(isSS(i)){//如果i是素数,就累加到su......
  • 6-2 计算素数和
    本题要求计算输入两个正整数x,y(x<=y,包括x,y)素数和。函数isPrime用以判断一个数是否素数,primeSum函数返回素数和。实现代码:defisPrime(x):foriinrange(2,x):......
  • 【230320PH-1】冰中包裹一6克的金属球,漂浮在内部底面积为10平方厘米的柱状容器的水面
    ......
  • [线筛|欧拉筛]线性筛选素数
    来源:模板题目描述:用线行筛筛选素数,将指定范围的素数找出,达到O(n)的效果。思路时间复杂度0(n)思路任意值必然可以被分解为:​​a=b1^c1*b2*c2*...​​​例如​​9=3^3,15=3*5,......
  • [pat乙]1007 素数对猜想
    1007素数对猜想(20分)让我们定义dn为:dn=pn+1-pn,其中pi是第i个素数。显然有d1=1且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”......
  • [pat乙]1013 数素数
    1013数素数(20分)算法标签:欧拉筛1013数素数(20分)令P​i​​表示第i个素数。现任给两个正整数M≤N≤10​4​​,请输出P​M​​到P​N​​的所有素数。......
  • #创作者激励#[触觉智能RK3568]修改屏幕 DPI(像素密度)
    【本文正在参加2023年第一期优质创作者激励计划】(目录)触觉智能RK3568购买链接如下:https://item.taobao.com/item.htm?spm=4645b.1.14.1.5c4a4a7dv1soeZ&id=6587890390......
  • 数学知识模板之筛法求素数
    筛法求素数1.朴素筛法求素数intprimes[N],cnt;boolst[N];voidget_primes(intn){ for(inti=2;i<=n;i++) { if(st[i])continue; primes[cnt++]=......