• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 素数筛选法

素数筛选法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-12-31

通过本文主要向大家介绍了素数筛选法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

点击打开链接

 

D - 2017-like Number


 

Time limit : 2sec / Memory limit : 256MB

Score : 400 points

Problem Statement

We say that a odd number N is similar to 2017 when both N and (N+1)⁄2 are prime.

You are given Q queries.

In the i-th query, given two odd numbers li and ri, find the number of odd numbers x similar to 2017 such that li≤x≤ri.

Constraints

  • 1≤Q≤105
  • 1≤li≤ri≤105
  • li and ri are odd.
  • All input values are integers.

Input

Input is given from Standard Input in the following format:

Q
l1 r1
:
lQ rQ

Output

Print Q lines. The i-th line (1≤i≤Q) should contain the response to the i-th query.


Sample Input 1

1
3 7

Sample Output 1

2
  • 3 is similar to 2017, since both 3 and (3+1)⁄2=2 are prime.
  • 5 is similar to 2017, since both 5 and (5+1)⁄2=3 are prime.
  • 7 is not similar to 2017, since (7+1)⁄2=4 is not prime, although 7 is prime.

Thus, the response to the first query should be 2.


Sample Input 2

4
13 13
7 11
7 11
2017 2017

Sample Output 2

1
0
0
1

Note that 2017 is also similar to 2017.


Sample Input 3

6
1 53
13 91
37 55
19 51
73 91
13 49

Sample Output 3

4
4
1
1
1
2

这个题的题意很简单就不多说了,就问L~R之间素数的个数。

下边的这个是常规写法,遍历L~R,每个数都判断一遍。  这个肯定会超时

 

#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <list>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf = 0x3f3f3f3f;
int fun(int x)
{
    int w=sqrt(x);
    for(int i=2;i<=w;i++)
        if(x%i==0)
            return 0;
    return 1;
}
int main() 
{
    int t;
    cin>>t;
    while(t--)
    {
        int l,r;
        cin>>l>>r;
        int ans=0;
        if(l%2==0)
            l++;
        for(int i=l;i<=r;i+=2)
        {
            if(fun(i)&&fun((i+1)/2))
            {
                ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

但是这是多组数据,时间2s,看似很长,其实很短。

 

由于种种原因,我需要预处理,把素数不是素数区分做标记,这样先处理一次就行了,就避免了重复计算了。

这个就是——素数筛选法

#include <bits/stdc++.h>
using namespace std;
const int n=1e5+1;
int c[n],s[n]; 
int main()
{
    for(int i=2;i<n;i++)//素数筛选法,不是素数的标记为1
    {
        if(!c[i])
        {
            if(i!=2&&!c[(i+1)/2])
                s[i]=1;
            for(int j=i+i;j<n;j+=i)
                c[j]=1;
        }
    }
    for(int i=2;i<n;i++)//记录此坐标与之前的值素数个数
    {
        s[i]+=s[i-1];
    }
    int q;
    cin>>q;
    while(q--)//q次查询
    {
        int l,r;
        cin>>l>>r;
        cout<<s[r]-s[l-1]<<endl;//l与r之间的素数个数
    }
    return 0;
}

 

 

 

 

 

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28C++实现简单的信息管理系统
  • 2017-05-28C++中求旋转数组中的最小数字(经典面试题)
  • 2017-05-28深入理解C++的对象模型
  • 2017-05-28使用C语言打造通讯录管理系统和教学安排系统的代码示例
  • 2017-05-28C++中四种加密算法之DES源代码
  • 2017-05-28linux c 获取本机公网IP的实现方法
  • 2017-05-28解析C++中的字符串处理函数和指针
  • 2017-05-28用c语言实现2000内既能被3整除又能被7整除的个数
  • 2017-05-28简单分析C语言中指针数组与数组指针的区别
  • 2017-05-28C++ 遍历目录下文件简单实现实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++编程中逗号运算符和条件运算符的使用方法讲解
    • 用c 获取文件MD5值的实现方法
    • 关于win32 gettimeofday替代方案
    • 关于C++中定义比较函数的三种方法小结
    • 解析sizeof, strlen, 指针以及数组作为函数参数的应用
    • C++实现翻转单词顺序
    • c++利用windows函数实现计时示例
    • c++实现简单的线程池
    • C++基础入门教程(四):枚举和指针
    • Cocos2d-x UI开发之CCControlPotentiometer控件类使用实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有