acm数学总结
1、给定两个质数,m, n, 大于n * m - n - m的数都可以被整数个n和m唯一组成。
相关习题:[Coins] (https://ac.nowcoder.com/acm/contest/34980/K)
总结:这个题很明显打表找规律,不知道定理也没关系。可以猜。猜两个质数是不是就可以组成一个其他的数。
2、[ShuanQ] (https://acm.hdu.edu.cn/showproblem.php?pid=7158)
P × Q ≡ 1 mod M
P × Q − 1 = k × M, k ≥ 1
M 是 kM 的一个比P, Q都大的质因子,最多只有一个质因子满足要求,如果有多个满足要求质因子M1,M2,那么k*M = M1 * M2 > P*Q 矛盾。
思路:先把1~1e6的质数都筛出来,然后暴力求出来M。然后就可以求r了。
3、快速求最大质因子:
```cpp
for(int i = 2; i <= sqrt(n); i++){
if(n % i == 0){
while(n % i == 0){
n = n / i;
}
}
}
```
每次算的时候,sqrt(n)也会发生改变,但时间复杂度是O(sqrt(n))。
4、询问区间gcd
用线段树进行维护,更改用差分维护,这样可以只修改两个点。
序列{a1,a2,...,an}的gcd = {a1,a2 - a1, a3 - a2, ..., an - a(n - 1)}的gcd。
证明:
首先证明gcd{a1, a2, ..., an} <= gcd{a1,a2 - a1, a3 - a2, ..., an - a(n - 1)}。
假设gcd{a1, a2, ..., an} = d,
第一个序列和第二个序列的首项都是a1,所以d | a1。
又d | a2, 所以d | (a2 - a1)
后面以此类推,同理可得gcd{a1, a2, ..., an} >= gcd{a1,a2 - a1, a3 - a2, ..., an - a(n - 1)}。
所以,gcd{a1, a2, ..., an} = gcd{a1,a2 - a1, a3 - a2, ..., an - a(n - 1)}。
所以,求解时,我们可以维护差分数组,差分前x项和刚好是ax,然后求gcd(ax,gcd(x + 1, n)就是答案。
5、圆
(1)圆的内接四边形的对角互补,并且任何一个外角都等于它的内对角。