一、质数 质数是大于1的自然数,只包含1和本身两个约数。 1、质数的判定,O(sqrt(n)) 试除法,推荐循环i<=n/i(防止溢出和sqrt计算) 2、分解质因子,O(logn~sqrt(n)) 1 for(int i=2;i<=n/i;i++) 2 { 3 if(n%i==0) 4 {//此时2~i-1的质因子已经除完,i必为质
诶式筛法 void get_primes2() { for(int i = 2; i <= n;i++) { if(!st[i]){ primes[cnt++] = i; // 把素数存起来 for(int j = i + i; j <= n;j += i) st[j] = true; // 把质数的倍数筛掉 } } } 线性筛法 void get_primes() {
欧拉函数 欧拉函数的公式可以用容斥原理证明。 欧拉函数的求法1:O(n*sqrt(n)) ACWING873欧拉函数 给定 n 个正整数 ai ,请你求出每个数的欧拉函数。 欧拉函数的定义 输入格式 第一行包含整数 n 。 接下来 n 行,每行包含一个正整数 ai 。 输出格式 输出共 n 行,每行输出一个正整
X的因子链 输入正整数 X,求 X 的大于 1 的因子组成的满足任意前一项都能整除后一项的严格递增序列的最大长度,以及满足最大长度的序列的个数。 输入格式 输入包含多组数据,每组数据占一行,包含一个正整数表示 X。 输出格式 对于每组数据,输出序列的最大长度以及满足最大长度的序列
const int N = 1e4; int primes[N], cnt; bool st[N]; bool vis[N]; void get_primes(int n) { for(int i = 2; i <= n; i++) { if(!st[i]) primes[cnt++] = i; for(int j = 0; primes[j] <= n / i; j++) { st[primes[j]*i
/* *date:2021.11.13 *author:percation */ #include <bits/stdc++.h> using namespace std; #define ll long long const int N = 2e6 + 10, M = 1e6 + 100; int n,m; ll num; ll a[N]; int prime[N]; bool st[N]; int cnt = 0; void isprime(){ st[1] = 1; for(int
质数筛选法 文章目录 质数筛选法 前言一、埃氏筛 O ( n l o
代码: 1 def is_prime(number): 2 if number in(1,2): 3 return Ture 4 for idx in range(2,number): 5 if number%idx==0: 6 return False 7 return True 8 9 10 11 12 def print_primes(begin,end): 13 for number
筛法求欧拉函数 给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和。 输入格式 共一行,包含一个整数 n。 输出格式 共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和。 数据范围 1≤n≤106 输入样例: 6 输出样例: 12 题意分析: 首先补一个公式 欧拉函数的定义 1∼N 中与 N 互
题组传送门 题意 现在给你一个含有 n n n个正整数的集合 a [ ] a[ ]
题目传送门 约数个数与约数和专题 #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> PII; const int N = 110; const int mod = 1e9 + 7; unordered_map<int, int> primes; int n; int main() { cin >> n; wh
题目传送门 理解与感悟 先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,……依此类推,最后剩下的就是素数。 如求100以内的素数,我们只要到去掉sqrt(100)的倍数就可以了,这是因为10的2倍已经被2的倍数去掉了,10的3倍已经被3的倍数去掉了,所以到10的时候只剩下10的10倍以上的素数还存在。 同样
题意 求 ∑ i = 1 n
思路: 流程: 来源大佬题解 代码: # include<iostream> # include<algorithm> # include<vector> using namespace std; const int N = 5010; int primes[N],cnt; int sum[N];//每个质数的次数 bool st[N]; //筛素数,把1−5000之间的素数筛出来。 void get_primes(int n)
A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime. Now given any two positive integers N (&
第一部分 : 分解质因数 任何一个大于 1 的正整数都可以写成这样的形式: 其中 Pi 是 一个质数 那么我们可以用怎么样的算法去得到 这个正整数的 质因数以及其 指数呢? 我们可以用 试除法这个方法:① 找到N的一个 质约数 然后让N一只除这个质约数,直到 N % Pi != 0 ② 记录我们除
题目传送门。 题意简述:将质数集合的所有子集按照子集和为第一关键字,字典序为第二关键字从小到大排序,求最终形成的字符串的第 \(l\sim r\) 个字符。 在 cnblogs 内查看。 又是一道妙妙题。 首先考虑当 \(r\leq 10^5\) 时直接搜索,首先枚举子集和 \(i\),状态是 \(sum,len,lim\) 表
2021"MINIEYE杯"中超(6) 1001 Yes, Prime Minister 考虑区间和公式:(l + r) * (r - l + 1) / 2,当r >= l + 2时,这个公式一定可以写成两个大于1的数相乘,也就一定不是质数,所以在r > 0时,区间和长度一定不大于2。(l > 0 且r >= l + 2时) 对于x < 0 时,有两种情况:1.找到一个最小的y,使得y大
[总结] 线性筛与积性函数 利用线性筛中一个数仅仅被它最小的质因子筛掉的性质,结合积性函数的特殊性质,往往可以预处理出积性函数的值。 \(\varphi(x)\) 设 \(P\) 是质数,显然 \(\varphi(p)=p-1\)。 根据定义式:\(\varphi(x)=x\cdot \prod_{i=1}^k{\frac{p_i-1}{p_i}}\),则 \(\varphi
超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。 给你一个整数 n 和一个整数数组 primes ,返回第 n 个 超级丑数 。 题目数据保证第 n 个 超级丑数 在 32-bit 带符号整数范围内。 示例 1: 输入:n = 12, primes = [2,7,13,19] 输出:32 解释:给定长度为 4 的质数
题目传送门 一、思路与感悟 1、查看一下A、B集合的数据范围,发现是\(1 <= a < b <= 10^5\),双重循环遍历所有组合,就是\(10^{10}\)次运算,肯定会\(TLE\),所以暴力是不行的。 2、那只能是通过某些条件干掉一些数字,减小范围。题意可知,两个数都需要有一个大于等于\(p\)的公共质数因子,需要
题目传送门 这道题有一个非常牛逼的数据结构就是 m u l t i s e
常用代码模板4——数学知识yyds 试除法判定质数 bool is_prime(int x) { if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; return true; } 试除法分解质因数 void divide(int x) { for (in
难度 1300 题目 Codeforces: B. T-primes time limit per test 2 seconds memory limit per test 256 megabytes We know that prime numbers are positive integers that have exactly two distinct positive divisors. Similarly, we'll call a positive integer t
传送门:Problem - 1149A - Codeforces 考虑到除了2以外所有的质数都由奇数组成,因此贪心思路为构造一个数列,使得数列中前缀和为奇数的情况尽量多。 因此可以先输出2和1,再将所有的2输出,最后再输出所有的1,此时得到的前缀和为质数的数量最多。 #include<iostream> #include<cstd