![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acm-数论
兮兮落落_
编程小白
展开
-
HDU 5833 Zhu and 772002
高斯消元解异或方程。题意:给你n个数,然后让你选择一些数,乘起来成为完全平方数,问你有多少种方案。分析:例如四个整数4,6,10,15。他们的素因子只有2,3,5这3种,把他们写成01向量的形式4 = 2^2 * 3^0 * 5 ^ 0 ->(2,0,0);6 = 2^1 * 3^1 * 5 ^0 ->(1,1,0), 10 = 2^1 * 3^0 * 5^1 ->(1,0原创 2017-08-16 16:13:16 · 196 阅读 · 0 评论 -
lightOJ 1220 Mysterious Bacteria
题意:给出一个数n,n是int范围,找出满足 n = x^b ,b的最大值。x为整数。分析:先打个素数表,再将n进行素因子分解,在对它的素因子的指数进行取最大公因数,例如 4500 = 2 ^ 2 * 3 ^ 2 * 5 ^ 4, 取gcd 后 = 2 ^ 2 * 3 ^ 2 * (5^2) ^ 2 = (2 *3 * (5^2) ) ^ 2;故这个gcd就是结果。当n是负数时原创 2017-08-23 19:29:38 · 156 阅读 · 0 评论 -
LightOJ 1234 Harmonic Number
题意:求1/1 + 1/2 + 1/3 + …… + 1/n 的和。n 分析:打表记录。开1e8的数组会爆内存,学到 开个1e6的数组,每100个数记录一次,然后再遍历加剩下的。代码:#include #include #include #include #include using namespace std;double sum原创 2017-08-23 17:08:08 · 206 阅读 · 0 评论 -
LightOJ 1236 Pairs Forming LCM
一道唯一分解的题目。代码:#include #include #include #include #include using namespace std;#define maxn 10000010typedef long long LL;LL prime[1000000];bool p[maxn];int k;void find_prim(){ k =原创 2017-08-23 15:38:50 · 170 阅读 · 0 评论 -
HDU 5832 A water problem
一道大数取模的水题。注意不要用cin,会超时。代码:#include #include using namespace std;char s[10000000+100];int main(){ int t = 0; int len; while(~scanf("%s", s)){ len = strlen(s); int an原创 2017-08-15 19:43:46 · 172 阅读 · 0 评论 -
矩阵快速幂
基础知识:(会基础的直接看应用部分)(1)矩阵乘法简单的说矩阵就是二维数组,数存在里面,矩阵乘法的规则:A*B=C其中c[i][j]为A的第i行与B的第j列对应乘积的和,即:代码:const int N=100;int c[N][N];void multi(int a[][N],int b[][N],int n){ memset(c转载 2017-08-22 10:38:39 · 265 阅读 · 0 评论 -
中国剩余定理(孙子定理)详解
中国剩余定理(孙子定理)详解问题:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?说明白一点就是说,存在一个数x,除以3余2,除以5余三,除以7余二,然后求这个数。定理:两数不能整除,若除数扩大(或缩小)了几倍,而被除数不变,则其商和余数也同时扩大(或缩小)相同的倍数(余数必小于除数)。这两个定理浅显易懂,自己找个例子就能理解,就不再赘述了。现给出求解该问题转载 2017-08-24 20:45:22 · 1170 阅读 · 0 评论 -
UVA 11426 GCD Extreme (II)
题意:给定N,求∑ini=1∑jnj=1gcd(i,j)的值。 思路:设f(n) = gcd(1, n) + gcd(2, n) + ... + gcd(n - 1, n) 。 然后得到递推式S(n) = f(2) + f(3) + ... + f(n) —> S(n) = S(n - 1) + f(n);. 这样问题变成如何求f(n)。设g(n, i),表示满原创 2017-08-24 20:01:25 · 218 阅读 · 0 评论 -
博弈总结
有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。转载 2017-08-21 19:28:35 · 353 阅读 · 0 评论 -
博弈模板(巴什博奕,威佐夫博弈,尼姆博弈,斐波那契博弈)
一. 巴什博奕(Bash Game): A和B一块报数,每人每次报最少1个,最多报4个,看谁先报到30。这应该是最古老的关于巴什博奕的游戏了吧。其实如果知道原理,这游戏一点运气成分都没有,只和先手后手有关,比如第一次报数,A报k个数,那么B报5-k个数,那么B报数之后问题就变为,A和B一块报数,看谁先报到25了,进而变为20,15,10,5,当到5的时候,不管A怎么报数,最后一个数肯定原创 2017-08-21 20:42:41 · 246 阅读 · 0 评论 -
hdu 3037 Skiing
组合数学-大组合数取模(Lucas定理)题意:将不超过m颗的相同的豆子放在n棵不同的树上,每棵树可以为空,求方案数mod p(1 分析:可以理解为有m颗豆子,在n棵树上放k颗,然后再加一棵树,放m-k颗,于是变成了m颗相同的豆子放在n+1棵不同树上的方案数。也就是求a[1]+a[2]+a[3]+......+a[n+1]=m,(a[i原创 2017-08-21 17:32:44 · 215 阅读 · 0 评论 -
POJ 1830 开关问题
高斯消元。开关问题类型的模板题。分析:写成n*n的矩阵,注意初始状态和最终状态。初始状态 到 最终状态 等同于 全零状态 到 (最终状态异或初始状态)。将可以影响该位置变换的位置(自己,上,下,左,右)置1,其余的置0。注意变换的顺序。代码:#include #include #include #include #include #includ原创 2017-08-21 16:20:36 · 204 阅读 · 0 评论 -
POJ 1222 EXTENDED LIGHTS OUT
高斯消元题意:给你一个5*6的矩阵,每个点上都有一个灯,按下f[i][j]的按钮,f[i][j]位置的灯的状态会改变,它上下左右的灯的状态也会改变(开变关,关变开)。现在给出这个矩阵的初始状态,输出按下哪些按钮,使所有的灯都关闭。分析:每个位置可以形成增广矩阵的一行,每行有30个系数分别代表0 -29号灯,将可以影响该位置变换的位置(自己,上,下,左,右)置1,其余的置0;这样原创 2017-08-21 15:53:24 · 262 阅读 · 0 评论 -
LightOJ 1259 Goldbach`s Conjecture
题意:给出一个偶数n,求出有几对素数的和等于n;即素数a,b其中(a 分析:一开始用素数打表,开个1e7的int数组存是否为素数, 最后再遍历 这些素数,是否存在 b =(n-这个数), 如果b还是素数,并且b >= a,则存在一组,ans++。一开始内存超限了几次,后来学到了,开的数组可以开个bool类型的,bool 每一个只占一个字节,而int占四个字节,内存一下就变成了1/原创 2017-08-19 10:45:13 · 177 阅读 · 0 评论 -
LightOJ 1282 Leading and Trailing
题意:求n^k的前三位和后三位。(n,k为大数)分析:后三位可以用快速幂得到(不足三位要补领0)。重点是求前三位。n可以写成10^a(a为小数)的形式。因此 n^k= 10^(ak). 而ak可以写成x+y,其中x为ak的整数部分,y为ak的小数部分.其中x决定了位数,y决定了值。因此只需求出y。 而n=10^a ,所以 a=log10(n)这里用到了fmod函数,原创 2017-08-19 09:41:30 · 162 阅读 · 0 评论 -
LightOJ 1341 Aladdin and the Flying Carpet
题意:给出整数 a 和 b ,求区间[b, a] 内的 a 的约数对的个数,a 的约数对(比如[2, 3] 与 [3, 2] 为同一对)。分析:这道题应用算数基本定理。算数基本定理:(1)一个大于1的正整数N,如果它的标准分解式为: ,那么它的正因数个数为 。(2) 它的全体正因数之和为 。当 时就称N为完全数。 是否存在奇完全数原创 2017-08-18 20:37:32 · 202 阅读 · 0 评论 -
lightOj 1370 Bi-shoe and Phi-shoe
题意:去买bamboo,bamboo的长度是 它的得分小的且与得分互素的数的个数, 如得分为9的bamboo, 小于9并与9互素的有1,2,4,5,7,8共6个,故它的长度为6;每位同学有个幸运数字,需要给每个同学买的bamboo的长度必须大于等于这个幸运数字,bamboo的价格一个单位长度为1xukha,求购买的最小的价格。分析:关于欧拉函数的题目。首先先知道一个素数的欧拉函原创 2017-08-18 17:39:59 · 318 阅读 · 0 评论 -
高斯消元法总结
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵。高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组。所以我们可以用初等行变换把增广矩阵转换为行阶梯阵,然后回代求出方程的解。以上是线性代数课的回顾,下面来说说高斯消元法在编程中的应用。首先,先介绍程序中高斯消元法的步骤:转载 2017-08-16 16:16:01 · 1091 阅读 · 0 评论 -
杨辉三角模板
杨辉三角的多种解法一:二维数组递推公式:f[1][1]=1 , f[i][j]=f[i-1][j-1]+f[i-1][j]核心代码:[cpp] view plain copyf[1][1]=0; for(int i=1;i{ for(int j=1;j {原创 2017-08-28 20:54:38 · 369 阅读 · 0 评论