随笔分类 - 数论
讨厌的数论专题, 看看我三年能不能学会你,让你成天折磨我
摘要:##$AcWing$ $872$. 最大公约数 一、题目描述 给定 $n$ 对正整数 $a_i,b_i$,请你求出每对数的最大公约数。 输入格式 第一行包含整数 $n$。 接下来 $n$ 行,每行包含一个整数对 $a_i,b_i$。 输出格式 输出共 $n$ 行,每行输出一个整数对的最大公约数。 数
阅读全文
摘要:##$AcWing$ $871$. 约数之和 一、题目描述 给定 $n$ 个正整数 $a_i$,请你输出这些数的乘积的约数之和,答案对 $10^9+7$ 取模。 输入格式 第一行包含整数 $n$。 接下来 $n$ 行,每行包含一个整数 $a_i$。 输出格式 输出一个整数,表示所给正整数的乘积的约数
阅读全文
摘要:##$AcWing$ $870$. 约数个数 一、题目描述 给定 $n$ 个正整数 $a_i$,请你输出这些数的乘积的约数个数,答案对 $10^9+7$ 取模。 输入格式 第一行包含整数 $n$。 接下来 $n$ 行,每行包含一个整数 $a_i$。 输出格式 输出一个整数,表示所给正整数的乘积的约数
阅读全文
摘要:##$AcWing$ $869$. 试除法求约数 一、题目描述 给定 $$ 个正整数 $a_i$,对于每个整数 $a_i$,请你按照从小到大的顺序输出它的所有约数。 输入格式 第一行包含整数 $n$。 接下来 $n$ 行,每行包含一个整数 $a_i$。 输出格式 输出共 $n$ 行,其中第 $i$
阅读全文
摘要:##$AcWing$ $868$. 筛质数 一、题目描述 给定一个正整数 $n$,请你求出 $1∼n$ 中质数的个数。 输入格式 共一行,包含整数 $n$。 输出格式 共一行,包含一个整数,表示 $1∼n$ 中质数的个数。 数据范围 $1≤n≤10^6$ 输入样例: 8 输出样例: 4 二、埃氏筛法
阅读全文
摘要:题目传送门 #include <bits/stdc++.h> using namespace std; /** * 功能:分解质因数 * @param x 待分解的质数因数 */ void divide(int x) { for (int i = 2; i <= x / i; i++) if (x
阅读全文
摘要:##$AcWing$ $867$. 分解质因数 一、题目描述 给定 $n$ 个正整数 $a_i$,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。 输入格式 第一行包含整数 $n$。 接下来 $n$ 行,每行包含一个正整数 $a_i$。 输出格式 对于每个正整数 $a_i$
阅读全文
摘要:等比数列求和公式: $\large S_n=\frac{a_1*(q^n-1)}{q-1}$ 高中数学内容,建议初一、初二时学习。 我们来推导一下: \(S_n=a_1*q^0+a_1*q^1+a_1*q^2+...+a_1*q^{n-1}\) \(①\) \(qS_n=\ \ \ \ \ \ \
阅读全文
摘要:一、约数个数公式 如果$n$的唯一分解式: \(n={p_1}^{r_1} {p_2}^{r_2} ... {p_k}^{r_k}\) 一、$n$的约数个数公式: $d(n) = (r_1+1) * (r_2+1) * ... * (r_k+1) $ 证明:以$p_1$为例,这个质数因子,可以选择$
阅读全文
摘要:题目传送门 一、前导知识 欧拉函数与筛法求欧拉函数 二、朴素思路 我们先不管数据范围是不是$10^{12}$,先思考就朴素的作法是什么样的: \(qiandao(x)=x−ϕ(x)\) ,假设$x$在我们可控的数据范围内,就是筛出数据范围内的$ϕ(x)$, 然后利用公式计算一下$sum$和,再$mo
阅读全文
摘要:欧拉函数专题 一、定义 定义:欧拉函数是小于\(n\)的数中与\(n\)互质的数的数目。 例如\(\large φ(8)=4\),因为\(\large 1,3,5,7\)均和\(\large 8\)互质。 解释:\(1\)和\(8\)是互质的。互质是指两个数的最大公约数为\(1\),而\(1\)和\
阅读全文
摘要:一、单个数质因数分解 直接上代码: #include <bits/stdc++.h> using namespace std; /** * 功能:分解质数因数 * @param a 待分解的数字 */ const int N = 1010; int primes[N]; //质数因子数组 int i
阅读全文
摘要:题目传送门 #include <bits/stdc++.h> using namespace std; typedef long long LL; LL x, y, ans; //辗转相除法 LL gcd(LL a, LL b) { if (b == 0) return a; ans += 4 *
阅读全文
摘要:题目传送门 一、解题思路 这道题有些意思,因为$a$肯定是分子,怎么想办法也不可能变成分母。$b$肯定是分母,怎么的也变不成分子。$c,d,e,f...$就是有可能是分子,也有可能是分母,尽量想办法让它们全是分子,这样出现整数的概率高,出现在分母,还得想办法去约分掉它,麻烦。(贪心) 那它们是否真的
阅读全文
摘要:题目传送门 一、准备知识 求一个数x的所有约数 #include <bits/stdc++.h> using namespace std; const int N = 1010; int c[N]; /** * 功能:获取指定数x的所有约数 * @param x */ void ys(int x)
阅读全文
摘要:题目传送门 #include <bits/stdc++.h> using namespace std; typedef long long LL; LL a, b, c; LL gcd(LL x, LL y) { return y ? gcd(y, x % y) : x; } LL lcm(LL x
阅读全文
摘要:题目传送门 #include <bits/stdc++.h> using namespace std; int a, b, c, d; /** 测试用例: 2/1+1/3-1/4 答案:25/12 -2/1+1/3-1/4 答案:-23/12 测试点6 7/4+1/3+8/5-3/2-6/9-6/4
阅读全文
摘要:一、定理内容 算术基本定理,又名唯一分解定理。若$a>1$,那么必有$a=p_1 ^ {\alpha _1}p_2^{\alpha _2}...p_s^{\alpha _s}$,其中$p_j(1<=j<=s)$是两两不相同的质数,$a_j(1<=j<=s)$表示对应质数的幂次(出现的次数)。若在不计
阅读全文
摘要:题目传送门 一、穷举p和q #include <bits/stdc++.h> using namespace std; //最大公约数 int gcd(int x, int y) { return y ? gcd(y, x % y) : x; } //最小公倍数 int lcm(int x, int
阅读全文
摘要:题目:给定$n$个整数。对于其中的每个数$a[i]$,求出删去它以后剩下的所有数的最大公约数,\(n<=10^6\)。 对于删去$a[i]$后的数组,显然剩下的数一定是$a[1]$到$a[i-1]$(前缀)和$a[i+1]$到$a[n]$(后缀)。这意味着,如果用$Left[i]$表示$a[1]$到
阅读全文