Spoj PRIME1 - Prime Generator

题意翻译

求给定的两个数之间的素数

Translated by @kaiming

题目描述

Peter wants to generate some prime numbers for his cryptosystem. Help him! Your task is to generate all prime numbers between two given numbers!

输入输出格式

输入格式:

The input begins with the number t of test cases in a single line (t<=10). In each of the next t lines there are two numbers m and n (1 <= m <= n <= 1000000000, n-m<=100000) separated by a space.

输出格式:

For every test case print all prime numbers p such that m <= p <= n, one number per line, test cases separated by an empty line.

输入输出样例

输入样例#1: 复制

2
1 10
3 5

输出样例#1: 复制

2
3
5
7

3
5

说明

Warning: large Input/Output data, be careful with certain languages (though most should be OK if the algorithm is well designed)
Information

After cluster change, please consider PRINT as a more challenging problem.

//Pro: Spoj PRIME1 - Prime Generator
//求给定的两个数之间的素数 

#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;

const long long N=40000;

long long T;
long long cnt;
long long prime[N+1];
bool flag[N+1];

void init()
{
    flag[1]=1;
    long long tmp;
    for(long long i=2;i<=N;++i)
    {
        if(!flag[i])
            prime[++cnt]=i;
        for(long long j=1;j<=cnt&&(tmp=i*prime[j])<=N;++j)
        {
            flag[tmp]=1;
            if(i%prime[j]==0)
                break;
        }
    }
}

long long l,r;
bool Flag;
int main()
{
    init();
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&l,&r);
        for(;l<=r;++l)
        {
            if(l<=N)
            {
                if(!flag[l])
                {
                    printf("%d\n",l);
                    continue;
                }
            }
            else
            {
                Flag=0;
                for(long long j=1;prime[j]<=sqrt(l)&& !Flag && j<=cnt;++j)
                {
                    if(l%prime[j]==0)
                        Flag=1;
                }
                if(!Flag)
                    printf("%d\n",l);
            }
        }
        puts("");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/lovewhy/p/9246205.html

时间: 2024-10-09 13:13:31

Spoj PRIME1 - Prime Generator的相关文章

素数筛法--SPOJ Problem 2 Prime Generator

质数(prime number)又称素数,除了1和它本身外,不能整除以其他自然数,换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数.最小的质数是2. 要判断一个整数N是不是质数很简单,看它是否能被2到sqrt(N)之间的整数整除即可. def isPrime(n): if n%2==0: return False for i in xrange(3,int(math.sqrt(n)+1),2): if n%i==0: return False return True 不过要找出1

Prime Generator(spoj)

原题: Prime Generator Problem code: PRIME1 Peter wants to generate some prime numbers for his cryptosystem. Help him! Your task is to generate all prime numbers between two given numbers! Input The input begins with the number t of test cases in a sing

SPOJ Python Day2: Prime Generator

2. Prime Generator 任务很简单,生成m到n之间的所有质数.一个比较常见的思路是: 自然数$1, 2, -, N$中的最大的质因子要小于$\sqrt{N}$.所以用m到n中的每一个数去试除1到$\sqrt{n}$中的所有数.能整除就是合数,全不能整除就是质数. 但是这么做会超时.. 一般生成质数有一个常用的算法:筛法 http://zh.wikipedia.org/wiki/%E5%9F%83%E6%8B%89%E6%89%98%E6%96%AF%E7%89%B9%E5%B0%B

SPOJ Problem 2: Prime Generator

嗯..在SPOJ上刷的第二题. 一开始不知道哪错了,后来发现i出现了两遍.. 因为m<10^9,所以用素数筛筛32000以内的数,开一个4000的数组存储就行.然后再从n开始用素数筛,总之效率还行. 代码如下: //0.01s 3.2M #include<cstdio> #include<cstring> #include<cmath> int n,i,j,t,m,k,tot; int a[100005],b[4000]; int prime[40000]; in

SPOJ PON - Prime or Not

题目链接:http://www.spoj.com/problems/PON/ 题目大意:判断N是不是素数,N<264-1. 解题思路:需要用到拉宾-米勒素性判定. (选自数论书籍)合数的拉宾-米勒测试:设n是奇素数,记n-1=2kq,q为奇数.对不被n整除的某个a,如果下述两个条件都成立,则n是合数. a): aq !≡ 1 (mod n),  即a的q次方不与1模n同余 b): 对所有i = 0,1,2,--,k-1, a2^i * q !≡ -1 (mod n) 所以可以打出100个素数表然

Prime Generator

Peter wants to generate some prime numbers for his cryptosystem. Help him! Your task is to generate all prime numbers between two given numbers! Input The input begins with the number t of test cases in a single line (t<=10). In each of the next t li

可以使用C#语言的在线ACM题库

俄罗斯乌拉尔大学在线题库 是一个可以使用C#语言的在线ACM题库,有兴趣的朋友可以去试试. Problem 1000. A+B Problem 是入门,就是简单地求整数 A 和 B 的和就行了,答案如下: 1 using System; 2 3 // http://acm.timus.ru/problem.aspx?space=1&num=1000 4 class Acm1000 5 { 6   static void Main() 7   { 8     string[] ss = Conso

OpenVPN安装配置

2. 安装 2.1安装前准备 系统:centos5.4i686 i686 i386 GNU/Linux 把系统的Forward打开,可以通过如下命令实现echo 1 > /proc/sys/net/ipv4/ip_forward或者使用sysctl -w net.ipv4.ip_forward=1或者修改/etc/sysctl.conf文件,增加net.ipv4.ip_forward = 1 首先检查系统是否安装lzo实时压缩工具$rpm -qa | grep lzo如果没有安装可以在http:

搭建openVPN服务器

搭建openVPN服务器 概述: OpenVPN允许参与建立VPN的单点使用共享密钥,电子证书,用户名/密码来进行身份验证,它大量使用了OpenSSL加密码库中的SSLv3/TLSv1协议函式库. 目前OpenVPN能在Solaris, Linux, OpenBSD, FreeBSD, NetBSD, Mac OS X与Windows 2000/XP/Vista上运行,并包含了许多安全性的功能, 它并不是一个基于Web的VPN软件, 也不与IPsec及其它VPN软件包兼容.OpenVPN所有的通