随笔分类 - ACM / math(basic)
摘要:原题链接 考察:质因数分解,筛质数 思路: 比较明显的思路是循环$1$~$n$每一个$a[i]\(,分解质因数,时间复杂度约为n\*\)\sqrt{107}$会有超时的风险. 优化就是筛到$107$的质数,然后判断为质数立马跳出. 将质数的指数取最小值.然后循环$a[i],b[i]$除去质数. 但是
阅读全文
摘要:原题链接 考察:快速幂 思路: 简单题,但我$wa$了$n$次... $mp$统计$sum-a[i]$的出现次数.从小开始遍历,如果次数可以整除$x$,则需要进位,注意每个地方都最好$long long$.... 还有就是分子可能>分母,因为$a$最小可以 \(= 0\) ##Code #inclu
阅读全文
摘要:原题链接 考察:数论(?) 思路: 一开始还以为是背包什么的,结果数字有规律....$1689$的排列可以组成0~6的余数.剩下的数字我们随意拼即可.$0$直接全部放末尾.不存在没有数字的情况. ##Code #include <iostream> #include <cstring> #inclu
阅读全文
摘要:原题链接 考察:数论 思路: 如果先手胜,说明$n$是一个质数或者$n$存在因子,该因子只有质因数.第二个条件判断只需要$n$有两个质因子,而不需要一个个枚举因数. ##Code #include <iostream> #include <vector> #include <cmath> using
阅读全文
摘要:原题链接 考察:数论 思路: 串联: \(\frac{a}{b}+1 = \frac{a+b}{b}\) 并联: \(\frac{a}{b}与1并联--> \frac{a}{a+b}\) 也就是说分子分母不论大小可以得到相同的结果 ##Code #include <iostream> #includ
阅读全文
摘要:原题链接 考察:思维 思路: 神仙题.想了半天还以为和一元二次方程的$b2-4ac$有关系,结果没多大关系(.),或者可能是本蒟蒻没想到 一般是将两个未知量划到左右两边个一边,枚举其中一个来确定方案数. \(y^2-x^2 = ax+b\) \(y^2 = x^2+ax+b\) \(4y^2 = 4
阅读全文
摘要:原题链接 考察:约数 推到一点感觉完全没规律就没继续了,没想到操作如此之骚... 思路: \(\frac 1x+\frac1y=\frac1{n!}\) \(\frac {x+y}{xy}=\frac1{n!}\) 因为有两个变量,而我们用控制变量法才好求个数,因此我们最好用x(y)表示y(x).
阅读全文
摘要:原题链接 考察:约数 这题很久以前做过一次,但我没写博客,结果再来一次我还是不会(.) 错误思路: 倍数法求每个a[i]的倍数,基本代码如下: for(int i=1;i<=n;i++) { scanf("%d",&a[i]); for(int j=1;j<=M/a[i];j++) sum[j*a[
阅读全文
摘要:原题链接 考察:扩展gcd 思路: 套exgcd模板但是答案没有那么简单!!! 坑点: 存在!a||!b的情况,此时答案是系数为0的变量的范围.但是if !a&&!b 此时只有!c才存在答案. 此时a&&b, 我们可以求出x,y的某一个解.如果直接while(x+=b/d)统计会TLE.因此必须转换
阅读全文
摘要:原题链接 考察:最大公约数 思路: 设原序列为a1,a2,a3...an,公比为(q/p)t,题目给的样例是在a数组中随机抽取一些数,形成新序列 b1,b2,b3...bn,可以发现b2/b1 = (q/p)k1 b3/b1 = (q/p)k2 ,显而易见k1与k2都是t的倍数,对k求最大公约数就是
阅读全文
摘要:原题链接 考察:dfs+约数 错误思路: 倍数法求出所有约数,N要开到1e9必然MLE且TLE 正确思路: 观察约数之和的式子 s = (1+p1+p12+p13+..)*(1+p2+p22+p23+...) ,要满足能够这种性质的数在1~2E9内较少.再继续观察,假设p全为2,(1+2)*(1+2
阅读全文
摘要:原题链接 考察:唯一分解定理 思路: 很容易想到最长公共子序列,dp只能求出长度,不能求出个数.我们模拟样例,100的约数 2 4 5 10 20 25 50 100. 最长是4, 2 4 20 100也可以是5 10 20 100可以发现开始的数必然是素数,而序列可以表示成 2,2*2,2*2*5
阅读全文
摘要:原题链接 考察:唯一分解定理 这题不会,果然我是不配学OI的 思路: 易知只有当阶乘出现了2和5才能有一个0, 由唯一分解定理 n! = 2a3b5c....,当我们把n!的2和5的共同凑成10的因子全部除去后,再%10就能得到答案.这个答案为 2a-min(a,c)%10*5c-min(a,c)%
阅读全文
摘要:原题链接 考察:枚举+质数筛 错误思路: 通过观察很容易发现指数必须是合数,筛出质数,用质数为底数快速幂求幂后的结果insert进set 这个思路有几个错误点: 合数也可以是底数 如68 这个用质数快速幂是求不出来的(思路不完全...) 不能用快速幂求结果,这样不能判断是否溢出 正确思路: 一个一个
阅读全文
摘要:原题链接 考察:思维+二分 错误思路: 根据分析可以发现当n为5的倍数时,n!会多>=1个0.如果n能分解k个5.那么会在(n-5)!的基础上多k个0.看到这里可能会想到前缀和预处理,但是当n=1e8时,它的0还未到1e8个.如果用数组存储会MLE. 正确思路: 不能预处理只能每个每个地算,但是每次
阅读全文
摘要:原题链接 考察:高精除 为什么在数论题单看见这道题... 坑点: 本蒟蒻WA一次的原因可能是存在多个负号的坑爹数据,改了这个AC了..不太清楚是不是因为改了别的地方 1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4
阅读全文
摘要:原题链接 考察: 质数筛+分解质因数 但我觉得考察的应该是分情况处理的能力 n>0,被唯一的质数分解 直接输出答案即可 n>0,被多个质数分解(完全没想到还有这种数据) 输出的答案应该是最小的指数 n<0,被唯一质数分解. 且指数为奇数. 这正好处理了负号问题,直接输出即可 n<0,被唯一质数分解.
阅读全文
摘要:原题链接 考察:打表+思维 直接开1e8的数组预处理会MLE. 所以需要压缩打表.每100存储一次. 预处理的时候看大佬有更好的方法,eg:用一个变量接收1~99之间的和,到%100==0时再赋值给数组 1 #include <iostream> 2 #include <algorithm> 3 #
阅读全文
摘要:原题链接 考察:质数筛+唯一分解定理 这道题的思路与该题GO 的解法二相同 错误思路: 预处理质数,分解质因数,dfs两个约数,结果是TLE 时间是2891ms 正确思路: 如同上题的解法二.本蒟蒻一开始的思路也是这个,但是本蒟蒻没想出来lcm(8,3)这种情况怎么统计= = ,只想到一方为n,另一
阅读全文