Min25筛求1-n内的素数和】的更多相关文章

1 //#include <bits/stdc++.h> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<iostream> 6 #include<string> 7 #include<vector> 8 #include<stack> 9 #include<bitset> 10 #include<…
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; ]; ]; int main() { int n; while(cin>>n){ ; ;i<=n;i++){…
再不写总结我又会忘掉啊啊啊啊啊啊啊啊啊 这个\(min-25\)筛主要用来求一个积性函数的前缀和,就像这样\[\sum_{i=1}^n f(i)\] 不过这个积性函数要满足两个条件:质数\(p\)的函数值\(f(p)\)有个多项式表达,\(f(p^c)\)能够快速计算 \(min-25\)筛求前缀和的过程可以看成把所有数贡献分成质数贡献和合数贡献计算(可能有\(1\)的贡献).先考虑质数的贡献 ... 好像除了暴力没有更好的办法啊 不过可以发现一个数\(>\sqrt{n}\)的质因子最多只有一个…
题意 题目链接 Sol min25筛的板子题,直接筛出\(g(N, \infty)\)即可 筛的时候有很多trick,比如只存\(\frac{N}{x}\)的值,第二维可以滚动数组滚动掉 #include<bits/stdc++.h> #define LL long long //#define int long long using namespace std; const int MAXN = 2e6 + 10; int Lim, vis[MAXN], prime[MAXN], tot;…
推导过程类似https://www.cnblogs.com/acjiumeng/p/9742073.html 前面部分min25筛,后面部分杜教筛,预处理min25筛需要伯努利数 //#pragma GCC optimize(2) //#pragma GCC optimize(3) //#pragma GCC optimize(4) //#pragma GCC optimize("unroll-loops") //#pragma comment(linker, "/stack…
题意:一个数的真因数指不包括其本身的所有因数,给定L,R,求这个区间的所有数的最大真因数之和. 思路:min25筛可以求出所有最小因子为p的数的个数,有可以求出最小因子为p的所有数之和. 那么此题就是对于所有素数因子,求它对应的和. #include<bits/stdc++.h> using namespace std; #define ll unsigned long long ; ll Sqr,vis[maxn],pri[maxn],sp[maxn],tot,m,id1[maxn],id2…
「学习笔记」Min25筛 前言 周指导今天模拟赛五分钟秒第一题,十分钟说第二题是 \(\text{Min25}​\) 筛板子题,要不是第三题出题人数据范围给错了,周指导十五分钟就 \(\text{AK}​\) 了,为了向 \(\text{AK}​\)王 学习,真诚的膜拜他,接受红太阳的指导,下午就学习了一下 \(\text{Min25}​\) 筛. 简介 如果 \(f(n)\) 是一个积性函数,且 \(f(n)\) 是一个关于 \(n\) 的简单多项式,并可以快速算出 \(f(p^k),\ p\…
前言 杜教筛学了,顺便把min25筛也学了吧= =刚好多校也有一道题需要补. 下面推荐几篇博客,我之后写一点自己的理解就是了. 传送门1 传送门2 传送门3 这几篇写得都还是挺好的,接下来我就写下自己对min25筛的理解吧 . 正文 简介: min25筛同杜教筛类似,是用来解决一类积性函数的前缀和,即\(\sum_{i=1}^nF(i)\),并且这里的\(n\)可以达到\(10^{10}\)的规模. 但所求积性函数要求满足以下条件: \(F(p)\)可以表示为简单多项式的形式,比如\(p_1^{…
pro:给定三个整数L,R,P求[L,R]区间的整数有多少个是以P为最小因子的.L,R,P<2e9; sol: 一: 比较快的做法是,用函数的思想递归. 用solve(N,P)表示求1到N有多少数字多少个的最小因子是P: 1,首先P是合数,或者N<P:solve=0: 2,否则,如果P*P>=N:solve=1: 3,solve=N/P-solve(N/P,i);     2<=i<P 由于P主要分布在sqrt(N),而且N每次log级别减小,所以收缩得很快.具体的复杂度我证…
Min25筛 我是沙雕... 从yyb博客蒯的 要求:\(\sum_{i=1}^nF(x)\) \(F(x)\)是积性函数. \(Min25\)筛能用的前提:质数处的\(f(p)\)值是关于\(p\)的多项式,质数次方处的\(f(p^e)\)值 可以快速计算. 预处理 设完全积性函数\(F'(x)\),在质数处取值\(F(p)=F'(p)\). 预处理一个\(g\)函数.\(g(n,j)=\sum_{i=1}^nF'(i)[i\in\mathbb{P}\text{ or }\min_{p|i}p…
Min25 筛与 Powerful Numbers Min25 筛 大喊一声 Min25 NB!!! 这是一个非常神奇的东西,用于求更加普遍的积性函数的前缀和. 比如我们要求 \(\sum_{i=1}^{n}f(i)\),其中 \(f(1)=1\).我们考虑将质数与合数分开考虑.(由于 \(1\) 这俩都不是,我们先不考虑)所以答案就等于质数的答案加上合数的答案再加上 \(f(1)\). 但是这样还是不够优美.因为合数的范围太广泛了,我们考虑对于每个质数再分组. 在这里,我们设 \(\sigma…
题意 求 \[ \sum_{i = 1}^{n} \sum_{i = 1}^{n} f(\gcd(i, j))^k \pmod {2^{32}} \] 其中 \(f(x)\) 为 \(x\) 的次大质因子,重复的质因子计算多次. 特别的,定义 \(f(1) = 0, f(p) = 0\) ,此处 \(p\) 为质数. 题解 首先先莫比乌斯反演前几步. \[ ans = \sum_{d = 1}^{n} f(d)^k \sum_{i = 1}^{\lfloor \frac{n}{d} \rfloo…
关于素数的基本介绍请参考百度百科here和维基百科here的介绍 首先介绍几条关于素数的基本定理: 定理1:如果n不是素数,则n至少有一个( 1, sqrt(n) ]范围内的的因子 定理2:如果n不是素数,则n至少有一个(1, sqrt(n) ]范围内的素数因子 定理3:定义f(n)为不大于n的素数的个数,则 f(n) 近似等于 n/ln(n) (ln为自然对数) ,具体请参考here 求不超过n的素数                         本文地址 算法1:埃拉托斯特尼筛法,该算法的…
求1~n内所有数对(x,y),gcd(x,y)=质数,的对数. 思路:用f[n]求出,含n的对数,最后用sum[n]求和. 对于gcd(x,y)=a(设x<=y,a是质数),则必有gcd(x/a,y/a)=1;所以我只要枚举i(设i=y/a),再枚举所有质数 他们乘积的f[i*a]值包括i的欧拉函数值.时间复杂度(n*质数个数) #include<iostream> #include<cstring> using namespace std; const int maxx=1…
求1~n内全部数对(x,y),gcd(x,y)=质数,的对数. 思路:用f[n]求出,含n的对数.最后用sum[n]求和. 对于gcd(x,y)=a(设x<=y,a是质数),则必有gcd(x/a,y/a)=1;所以我仅仅要枚举i(设i=y/a),再枚举全部质数 他们乘积的f[i*a]值包含i的欧拉函数值. 时间复杂度(n*质数个数) #include<iostream> #include<cstring> using namespace std; const int maxx…
最近重新系统地学了下这几个知识点,以前没发现他们的联系,这次总结一下. 莫比乌斯反演入门:https://blog.csdn.net/litble/article/details/72804050 线性筛筛常见积性函数及其代码:https://blog.masterliu.net/algorithm/sieve/ 积性函数与线性筛(包括普通线性函数):https://blog.csdn.net/weixin_42562050/article/details/87997582 bzoj2154/b…
怕忘了赶快更一下.就是求积性函数前缀和的. 没有 \(\LaTeX\) 原理 现在你有一个积性函数 f(1)=1 FP(p) FPK(p,k) 首先要求的是前缀和,那就是f(质数)+f(合数)+f(1),然后f(1)=1直接最后加上,算前面的时候直接忽略掉. 首先算质数(min25筛第一阶段) 为了能做必须先把f(x)搞成一堆完全积性函数的和一起筛,下面以其中一个f(x)为例 设G(n,j)为2-n中i(i是质数或者i的最小质因子>pj)的f(i)之和,f是积性函数中的FP函数 按j从小到大分层…
min25筛简介:用来求积性函数F(x)前缀和的,复杂度O(n0.75/logn),大概能求n<=1010. 记一个数x的最小质因子为R(x),所以当x不为质数时,R(x)<=√x这是废话. 首先求所有质数的F(x)和,下设g(i,j)=ΣF(x),其中2<=x<=i,且x为质数或R(x)>pri[j],其中pri[j]为第j个质数.其实,j的取值至多√n个显而易见,下面可以发现最终状态是g(i,tot),其中tot为√n以内的质数个数.初始化g(i,0),即将所有数视为质数…
仅仅是 \(min25\) 筛最基本的方法,没有任何推式子的例题.(想了想还是加两道吧qwq) 这里解决的是 \(Luogu\) 那道模板题. min25 基本方法: 最基础的是两个式子: \[G(n,m): 所有合数 \space x \le n \space 的最小质因子 > pri_m 的 \space p^k 和或者是质数 \space x \le n \space 的\space p^k 的和.\\ G(n,m) = G(n,m - 1) - pri_m^k \times (G(\fr…
在用python3求0~n之间的素数时,关于filter用法的有点模糊,于是上网查了一下filter用法. 求0~n之间素数的脚本prime.py: def f(x): plist = [0,0] + list(range(2,x+1)) for i in range(2,x): if plist[i]: plist[i+i::i] = [0]*len(plist[i+i::i]) return filter(None,plist) print(list(f(1000))) 关于filter不是…
题目链接 题意:求[1,n]有多少个素数,1<=n<=10^11.时限为6000ms. 官方题解:一个模板题, 具体方法参考wiki或者Four Divisors. 题解:给出两种代码. 第一种方法Meisell-Lehmer算法只需265ms. 第二种方法不能运行但是能AC,只需35行. 第一种: //Meisell-Lehmer #include<cstdio> #include<cmath> using namespace std; #define LL long…
洛谷1440 求m区间内的最小值 本题地址:http://www.luogu.org/problem/show?pid=1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个数n,m. 第二行,n个正整数,为所给定的数列. 输出格式: n行,第i行的一个数ai,为所求序列中第i个数前m个数的最小值. 输入输出样例 输入样例#1: 6 2 7 8 1…
求1~n之间的素数 难度级别:A: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述  素数是大于1,且除1和本身以外不能被其他整数所整除的数.要求输出1~n之间的素数. 输入 正整数n 输出 1~n之间的所有素数,包括n,数字之间用一个空格隔开,第一个数字前不能有空格. 输入示例 10 输出示例 2 3 5 7 其他说明 n是大于1且不大于100的正整数 题解:可以练习一下MR(都不会打了) #include<iostream> #in…
洛谷P1440 求m区间内的最小值 ............................................................................... 以上代表我此时的心情,调了一个小时....只因为顺序,维护一个单调递增队列就好了,这里n很大,输出要优化,这才挽救了30分.. #include<bits/stdc++.h> using namespace std; int n,m; ],q[]; int top,tai; void Cin(int…
素数的概念:一个整数如果只能整除1和它本身,那么这个整数就是一个素数 方法一:素数是除去能被2整除.3整除.5整除.7整除的整数,但包含2,3,5,7 public class Sushu { public static void main(String[]args){ String str="2 3 5 7 "; for(int i=2;i<=100;i++){ if(i%2==0||i%3==0||i%5==0||i%7==0 ){ //:逻辑判断,筛选 continue;…
单调队列,顾名思义是指队列内的元素是有序的,队头为当前的最大值(单调递减队列)或最小值(单调递增序列),以单调递减队列为例来看队列的入队和出队操作: 1.入队: 如果当前元素要进队,把当前元素和队尾元素比较,如果当前元素小于队尾元素,那么当前元素直接进队,如果当前元素大于队尾元素,那么队尾出队,将当前元素和新的队尾再做比较,直到当前元素大于队尾元素或者队列为空.单调队列只能在队尾插入元素,队尾和队头都可以删除元素. 2.出队: 出队直接取队头即可,因为用单调队列就是为了取最值,而队头就是最值.…
j package test1; //2018/11/30 //求100以内的所有素数 public class Main10 { public static void main(String[] args){ Main10 test=new Main10(); System.out.println("100以内的素数:"); int count=0; for(int i=2;i<100;i++) { if(test.isPrimeNumber(i)==true) { Syste…
Description 求n到m之间素数的个数 Input 多组测试数据,每组先输入一个整数t,表示组数,然后每组输入2个正整数n和m,(1 <= n <= m <= 10000) Output 每组一行,内容为一个整数,输出n到m之间素数的个数 Sample Input 1 2 3 Sample Output 2 #include<stdio.h> #include<math.h> int main() { int t; int i,j,k; int n,m;…
求n以内所有的素数? 筛选法:将2到n中所有的数都列出来,然后从2开始,先化掉所有2的倍数,然后每次从下一个剩下的数(必然是素数)开始,划掉其内所有的倍数,最后剩下来的数就都是素数 例:13  红色为删除的元素 第一轮 2的倍数: 2 3 5 7 9 11 13 第二轮 3的倍数: 2 4 5 7 13 第三轮 5的倍数: 2 4 5 7 13 ..... #include<iostream> using namespace std; int main() { int n,i,j; cin &…
素数(质数)    除了1和它本身以外不再被其他的除数整除. // 输出100--200内的素数 #include<iostream> using namespace std; int main() { int i,j; ;i<=;i++){ j=; ) j++;// while 是先判断再执行 if(i==j) cout<<i<<' '; } ;…