数学
深街酒徒*
专业气氛组成员
展开
-
875. 快速幂 Java题解 (二进制分解指数)
快速幂是用来快速求解a^k%p的结果,其中a,p,k的范围均可在10^9之内,其算法时间复杂度取决于指数k,为O(logk),比常规的O(n)快很多。其具体做法是:将指数k按二进制形式分解,如a^7 = a ^ (2^2) ·a ^ (2^1)·a ^ (2^0),而a的幂又可以通过连续对a平方求,所以速度很快。原创 2022-04-09 18:45:19 · 685 阅读 · 0 评论 -
868. 筛质数 Java题解 (埃氏筛,线性筛)
埃氏筛质数:又叫朴素筛法,求某个区间的质数个数时,从2开始,将每个数的倍数都筛掉,剩下的数就是质数。缺点:会对某个数重复筛。时间复杂度为O(nlogn)线性筛法:对埃氏筛的优化,埃氏筛的任意一个数都被它的因数筛了一遍,实际上只需要筛一次就行,即每次只用最小质因子筛,不会被重复筛,时间复杂度为O(nloglogn),非常接近线性。两种筛法的相同点:都可以在筛选时找到质数的个数,求出区间内的所有质数,并且能求出每个数的最小质因子。不同点:在10^6内,效率都差不多,但10^7时,线性筛明显比埃氏筛快原创 2022-04-08 22:43:50 · 873 阅读 · 0 评论 -
867. 分解质因数 Java题解 (试除法)
任何一个数n除了1之外的最小的因数一定是质数,所以分解质因数时,当把n的最小质因数m找到后,再除掉n,得到一个新的数,且这个新的数一定不小于m,因为若小于m,在之前就会被n除掉,一直循环,最后若正好是1,则分解完,否则最后剩下的数仍然是一个质数。时间复杂度介于O(logn)~O(sqrt(n))原创 2022-04-08 21:28:06 · 590 阅读 · 0 评论 -
866. 试除法判定质数 Java题解 (试除法判断质数)
判断某个数n是不是质数,只要从2开始到根号n为止都不能被n整除,这个数就是质数。特别地,1不是质数。原创 2022-04-08 21:01:44 · 240 阅读 · 0 评论 -
1246. 等差数列 Java题解 (gcd)【第十届蓝桥杯省赛C++B/C组,JAVA C组】
等差数列 An = A1 + nd,项数 n = (An - A1) / d,要想项数n最小,而An和A1是数列中的最大值和最小值,所以只需要将公差d为最大值,即只要求出数列中每个后一项减前一项的最大公约数即可。原创 2022-04-05 12:24:37 · 1147 阅读 · 0 评论 -
1211. 蚂蚁感冒 Java题解(数学)【第五届蓝桥杯省赛C++A/B组】
将直线上的蚂蚁分为两类(下面所说的感冒蚂蚁就是指输入中的第一只蚂蚁,并且假设这只蚂蚁向右走):①感冒蚂蚁左边的,②感冒蚂蚁右边的;在②中,向右走的蚂蚁由于不会与左边的蚂蚁碰头,所以一定不会感冒,而向左走的蚂蚁一定会和向有走的蚂蚁碰面,所以一定会感冒;在①中,向左走的蚂蚁一定不会与感冒蚂蚁碰面,所以一定不会感冒,但向右走的蚂蚁会不会感冒,取决于在感冒蚂蚁的右边是否有向左走的蚂蚁,当有时,就会碰面感冒,否则不会。原创 2022-03-23 17:41:36 · 757 阅读 · 0 评论 -
1205. 买不到的数目 Java题解 (dfs,数学)【第四届蓝桥杯省赛C++A组,第四届蓝桥杯省赛JAVA C组】
dfs:可以从2开始往后暴力搜索,看每个数是否能被所给定的两个数凑到,输出最后一个凑不到的数。数学知识:当两个数m和n的最大公约数为1时,从某个数x开始,之后的数一定可以被凑成,且这个数 x = ( m - 1) * ( n - 1) = m * n - m - n。原创 2022-03-23 16:08:09 · 1015 阅读 · 0 评论