这道题的L和R都很大,所以如果直接开一个1~R的数组明显会超时.但是R-L并不大,所以我们考虑把这个区间(L--R)移动到(1--(R-L+1))这个区间再开数组(就是把每个数减L再加1).接下来先用埃氏筛分(可以自行百度)求出[2,√R]区间的素数,并存在prime数组里.对于prime数组里的每一个质数,求出其在区间(L--R)的倍数并且标记成false(非素数).那么剩下的区间(L--R)里的数就都是素数咯~然后相邻的比较,求出差最大的和差最小的即可. 注意的细节:1.判断素数的数组(pr…
Problem Description: 包含33的素数称为校庆素数. 她想知道在L和R之间(包含L和R)有多少个校庆素数. 比如 2333 就是一个校庆素数. Input: 输入的第一行包括一个T(T <= 50),代表有T组数据. 每组数据输入两个整数L和R (1<= L <= R <= 500000). Output: 对于每组数据,输出"Case #x: y"(不包括引号),其中x代表数据的编号,从1开始,y代表该组数据的结果. Sample Input…
                                                Prime Distance 只会埃氏筛法的弱鸡今天读了读挑战程序设计120页,明白了求小区间内素数的方法. 突然发现挑战真的是本很好的书,很具有引导性,不过很多地方没有详细证明介绍,适用进阶选手. 题意:给你两个数,求[a,b]内相邻最近的素数对与相邻最远的素数对.但是,a,b的很大,同时b-a<=1e6. 思路:判断一个数b是否为素数只需判断i*i<=b即可,也就是说小于等于b的合数的最大素因子…
埃氏筛法 /* |埃式筛法| |快速筛选素数| |15-7-26| */ #include <iostream> #include <cstdio> using namespace std; const int SIZE = 1e7; int prime[SIZE]; // 第i个素数 bool is_prime[SIZE]; //true表示i是素数 int slove(int n) { ; ; i <= n; i++) is_prime[i] = true; //初始化…
埃氏筛法求素数和构造素数表求素数是一个道理. 首先,列出从2开始的所有自然数,构造一个序列: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ... 取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ... 取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍…
目录 一.素数筛的定义 二.埃氏筛法(Eratosthenes筛法) 三.线性筛法 四.一个性质 一.素数筛的定义 给定一个整数n,求出[1,n]之间的所有质数(素数),这样的问题为素数筛(素数的筛选问题). 二.埃氏筛法(Eratosthenes筛法) 埃氏筛法又叫做Eratosthenes筛法,一般叫做埃氏筛.埃氏筛的思想是: \(\forall x\in Z\)的倍数\(2x,3x,...\)都不是质数. 因此我们可以从2开始有小到大扫描每个数\(x\),并把\(x\)的倍数\(2x,3x…
time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output One way to create a task is to learn from math. You can generate some random math statement or modify some theorems to get something new and…
题目传送门 /* 题意:b+1,b+2,...,a 所有数的素数个数和 DP+埃氏筛法:dp[i] 记录i的素数个数和,若i是素数,则为1:否则它可以从一个数乘以素数递推过来 最后改为i之前所有素数个数和,那么ans = dp[a] - dp[b]: 详细解释:http://blog.csdn.net/catglory/article/details/45932593 */ #include <cstdio> #include <algorithm> #include <cs…
给你一个数n,请问n以内有多少个素数?(n <= 10e7) 一般来说,要是对一个整数进行素数判断,首先想到的是写个函数判断是否为素数,然后调用这个函数,时间复杂度为O(n^(½)),但是要求n以内的素数就略显吃力了. 要是求n以内的素数个数的话,可以用埃式筛选.预处理一下. 先看下面的代码: /* |埃式筛法| |快速筛选素数| |15-7-26| */ #include <iostream> #include <cstdio> using namespace std; c…
2689 -- Prime Distance 没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西. 题意是,要求求出给定区间内相邻两个素数的最大和最小差. 二次筛法的意思其实就是先将1~sqrt(b)内的素数先筛出来,然后再对[a,b]区间用那些筛出来的素数再次线性筛. 代码如下: #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using na…
核心思想:从i=2开始,划去i的倍数,即剩下i为质数(如删去2的倍数后2为质数,再删去3的倍数后3为质数,4被删除则跳过,5未被删除则记录然后删除5的倍数...以此类推) #include <bits/stdc++.h> using namespace std; #define max_n 1000000 }; bool is_prime[max_n]; int sieve/*埃氏筛选*/(int n) { ; memset(is_prime,,sizeof(is_prime)); ;i<…
题目大意:给定整数n,请问n以内有多少个素数 思路:想必要判断一个数是否是素数,大家都会了,并且可以在O(根号n)的复杂度求出答案,那么求n以内的素数呢,那样求就显得有点复杂了,下面看一下这里介绍的…
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstring> using namespace std; typedef long long LL; + ; //int prime[maxn + 1]; //第i个素数,保存区间内素数 bool is_prime[maxn]; //is_prime[i]为true表示i是素…
埃氏筛法: 对于每一个小于n的非负整数p,删去2p,3p,4p......,当处理完所有数后,还没有删除的就是素数. 想法:用a记录素数表,a[i]=1表示不是素数,a[i]=0表示是素数. #include <iostream> #include <algorithm> #include <cmath> using namespace std; int n,m,a[10000005],t; int main() { a[1]=1; cin>>n>&g…
Description The branch of mathematics called number theory is about properties of numbers. One of the areas that has captured the interest of number theoreticians for thousands of years is the question of primality. A prime number is a number that is…
传送门 一道挺有趣的. 第一眼以为每个数都用miller_rabin判一次,但感觉会被卡时间啊. 继续分析发现可以晒出sqrt(r)中的所有素数,然后用类似埃式筛法的方法晒出[l,r]" role="presentation" style="position: relative;">[l,r][l,r]之间的素数. 然后就没了. 代码: #include<iostream> #include<cstdio> #include&…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6069 题意: 给出 l, r, k.求:(lambda d(i^k))mod998244353,其中 l <= i <= r, d(i) 为 i 的因子个数. 思路:若 x 分解成质因子乘积的形式为 x = p1^a1 * p2^a2 * ... * pn^an,那么 d(x) = (a1 + 1) * (a2 + 1) * ... * (an + 1) .显然 d(x^k) = (a1 * k…
我们一般写的埃氏筛消耗的时间都是欧拉筛的三倍,但是欧拉筛并不好想(对于我这种蒟蒻) 虽然 -- 我 -- 也可以背过模板,但是写个不会的欧拉筛不如写个简单易懂的埃氏筛 于是就有了优化 这个优化还是比较厉害的,能把埃氏筛的消耗的时间提的跟欧拉筛差不多 以下内容需要先学会埃氏筛 学会的埃氏筛就明白它的原理了吧 #include<bits/stdc++.h> using namespace std; int n, m ,Is_p[10000001]; int main() { cin >>…
Recently, the bear started studying data structures and faced the following problem. You are given a sequence of integers x1, x2, ..., xn of length n and m queries, each of them is characterized by two integers li, ri. Let's introduce f(p) to represe…
https://oj.shiyancang.cn/Problem/781.html 素数距离,数据范围21亿,如果用素数筛存,并且进行做的话,按照x/lnx计算会是一个非常恐怖的复杂度.确定要做什么,首先一定要筛选素数,然后一定要进行素数的比较.问题就在筛选素数这里,可以看到区间范围很小,可以从这里入手,怎么储存,不可能按照那个储存,可以进行离散化,或者偏移,等等注意1的存在,无法被素数筛选掉,注意越界问题,那么就是区间素数筛选,埃氏筛的使用.因为算数基本定理,必然有小于sqrt的素数因子,这是…
直接用埃氏筛也可以做,但是这题写起来有点恶臭.. 更加简单的写法是直接枚举gcd=k,然后里面再枚举一次i*k,即找到k两个最小的倍数,看起来复杂度很高,但其实也是埃氏筛的复杂度 因为每次枚举gcd,相当于筛法中的枚举筛数,不同的是这题对于每个i在筛的过程中,不会筛到低,而是会中途退出循环,那么当其倍数i*k继续去筛的时候,仅仅是原来应该筛的数筛掉而已 ][]; int main() { int n; scanf("%d",&n); memset(value,,sizeof(v…
min_25 筛介绍 我们考虑这样一个问题. \[ans=\sum_{i = 1}^nf(i)\\ \] 其中 \(1 \le n \le 10^{10}\) 其中 \(f(i)\) 是一个奇怪的函数.并不像 \(μ(i),φ(i),iφ(i)\)那样具有那么好的性质.但是满足以下条件: 若 \(p\)为质数,则 \(f(p)\)是一个关于 \(p\)的多项式,比如 \(μ(p)=−1,φ(p)=p−1\). 若 \(p\)为质数,\(e\)为正整数,则 \(f(pe)\)可以很快求出.(通常是…
题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 题意:给你两个数 a b,求区间 [a, b]内素数的个数, a and b (1 ≤ a ≤ b < 231, b - a ≤ 100000). 由于a和b较大,我们可以筛选所有[2, √b)内的素数,然后同时去筛选掉在区间[a, b)的数,用IsPrime[i-a] = 1表示i是素数: ///LightOj1197求区间素数的个数; #include<stdio.h&g…
POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 [USACO]距离咨询(最近公共祖先) Description Farmer John's cows refused to run in his marathon since he chose a path much too long for their leisurely lifestyle. He therefore wants to find a path…
POJ.1986 Distance Queries ( LCA 倍增 ) 题意分析 给出一个N个点,M条边的信息(u,v,w),表示树上u-v有一条边,边权为w,接下来有k个询问,每个询问为(a,b),求a,b两点到lca(a,b)的边权之和为多少. 倍增维护树上前缀和,求得LCA之后,相应做差即可. 代码总览 #include <cstdio> #include <algorithm> #include <cstring> #include <cmath>…
http://lightoj.com/volume_showproblem.php?problem=1197 题目大意: 就是给你一个区间[a,b]让你求这个区间素数的个数 但a.b的值太大没法直接进行素数筛选(没法开那么大的数组),我们可以将a当做0,将b当做b-a 这样求[a,b]之间就变成了求[0, b - a]之间,这样就可以开数组来筛选 下图是代码式子j = j + prime[i] - a % prime[i]的由来 #include<stdio.h> #include<ma…
#6235. 区间素数个数 题目描述 求 1∼n 1\sim n1∼n 之间素数个数. 输入格式 一行一个数 n nn . 输出格式 一行一个数,表示答案. 样例 样例输入 10 样例输出 4 样例解释 1 2,3,5,72,3,5,72,3,5,7 数据范围与提示 对于 100% 100\%100% 的数据,2≤n≤1011 2 \leq n \leq 10^{11}2≤n≤10​11​​. #include<iostream> #include<cstdio> #include…
题目描述 原题来自:Codeforces Round #400 B. Sherlock 有了一个新女友(这太不像他了!).情人节到了,他想送给女友一些珠宝当做礼物. 他买了 nnn 件珠宝.第 iii 件的价值是 i+1i+1i+1.那就是说,珠宝的价值分别为 2,3,4,⋯,n+12,3,4,\cdots ,n+12,3,4,⋯,n+1. Watson 挑战 Sherlock,让他给这些珠宝染色,使得一件珠宝的价格是另一件的质因子时,两件珠宝的颜色不同.并且,Watson 要求他最小化颜色的使…
POJ 3518 Prime Gap(素数) id=3518">http://poj.org/problem? id=3518 题意: 给你一个数.假设该数是素数就输出0. 否则输出比这个数大的素数与比这个数小的素数的差值. 分析: 明显本题先要用筛选法求出130W(个素数)以内的全部素数. 然后推断给的数是否是素数就可以. 假设不是素数.那么就找出它在素数素组内的上界和下界,输出两个素数的差值就可以. 筛选法求素数可见: http://blog.csdn.net/u013480600/a…
 时间限制: 8 s  空间限制: 256000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 小明喜欢研究素数,他想统计两个自然数之间的素数个数,现在他给定一个区间,请你帮忙求出这个区间的素数个数. 输入描述 Input Description 两个数a和b,表示开区间[a,b] 输出描述 Output Description 输出一个数,表示区间素数的个数 样例输入 Sample Input 2 100 样例输出 Sample Output 2…