zoukankan      html  css  js  c++  java
  • 【JZOJ5458】质数【数论,数学】

    题目大意:

    题目链接:https://jzoj.net/senior/#main/show/5458
    题目图片:
    http://wx4.sinaimg.cn/mw690/0060lm7Tly1fweob4u4hmj30j50ba0t1.jpg
    http://wx3.sinaimg.cn/mw690/0060lm7Tly1fweob4u5lfj30jp0gr3yu.jpg
    http://wx2.sinaimg.cn/mw690/0060lm7Tly1fweob4unxlj30ji0fqjsx.jpg

    LLRR中是质数或是两个质数之积的数的个数。


    思路:

    首先,观察最大数据:
    LR107,Q105Lleq Rleq 10^7,Qleq 10^5
    那么肯定是要离线做的。
    肯定是要先筛质数,那么就用线性筛,不仅得到11RR之间的质数,还得到了每个数的最小质因数
    那么对于一个数xx

    • 如果它是质数,那么就很明显ans++ans++

    • 如果它不是质数:

      • 我们知道了这个数的最小质因数v[x]v[x],那么如果它符合题目的要求就必然有x=prime[i]×prime[j]x=prime[i] imes prime[j]。我们又知道v[x]xv[x]|x且是质数,所以说,如果要符合题意,就有x=v[x]×prime[j]x=v[x] imes prime[j],即prime[j]=x÷v[x]prime[j]=xdiv v[x]。所以说,如果x÷v[x]xdiv v[x]是质数,那么就ans++ans++
      • 否则不合法。

    那么我们可以求出前缀和sss[i]s[i]表示11RR中间有多少符合要求的数。然后O(1)O(1)回答即可。
    时间复杂度:O(107)O(10^7)(固定值,其实是O(R)O(R)


    代码:

    #include <cstdio>
    #include <cstring>
    #define N 10000100
    #define MAXN 10000000
    #define ll long long
    using namespace std;
    
    int sum,v[N],prime[N],s[N],l,r,n;
    bool isp[N];
    
    int f;
    char c;
    
    int read()  //输入流
    {
    	c=getchar();
    	f=0;
    	while (c<'0'||c>'9') c=getchar();
    	while (c>='0'&&c<='9') 
    	{
    		f=f*10+(c-'0');
    		c=getchar();
    	}
    	return f;
    }
    
    int write(int x)  //输出流
    {
    	if (x>9) write(x/10);
    	putchar(x%10+48);
    }
    
    void find()
    {
    	for (int i=2;i<=MAXN;i++)  //线性筛
    	{
    		if (!v[i])
    		{
    			v[i]=i;
    			prime[++sum]=i;
    			isp[i]=1;
    		}
    		for (int j=1;j<=sum;j++)
    		{
    			if (prime[j]>MAXN/i) break;
    			if (prime[j]>v[i]) break;
    			v[i*prime[j]]=prime[j];
    		}
    	}
    	for (int i=2;i<=MAXN;i++)
    	 if (isp[i]||isp[i/v[i]])  //符合要求
    	  s[i]=s[i-1]+1;
    	 else s[i]=s[i-1];
    }
    
    int main()
    {
    	find();
    	n=read();
    	while (n--)
    	{
    		l=read();
    		r=read();
    		write(s[r]-s[l-1]);
    		putchar(10);
    	}
    	return 0;
    }
    
  • 相关阅读:
    WebSocket
    牛人
    ECSHOP+wamp
    数据结构之-----------排序
    DRGS指标计算方法
    Oracle 11g安装教程
    JavaScript入门
    多态
    类的继承
    上传工具类
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998508.html
Copyright © 2011-2022 走看看