![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
--------【数学相关】
文章平均质量分 68
liuyanfeier
acmer
展开
-
数论 Lucas定理 hdu3037
对于C(n, m) mod p。这里的n,m,p(p为素数)都很大的情况。就不能再用C(n, m) = C(n - 1,m) + C(n - 1, m - 1)的公式递推了。这里用到Lusac定理A、B是非负整数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。则组合数C(A,B)与C(a[n]原创 2015-12-03 16:04:01 · 429 阅读 · 0 评论 -
51Nod 1499 进制转化问题。
题意:现在有好多种砝码,他们的重量是 w0,w1,w2,... 每种各一个。问用这些砝码能不能表示一个重量为m的东西。分析:题目被分到贪心算法了,可是我没有想到贪心的解法。这题我是这样想的,如果一个数m只是用w,w^1.....来表示的话,那这个数字m化成w进制其中肯定只有数字0和1,但现在我们要求的数字n是需要两个不同的m相减得到的,并且这两个m的同一位不能同时出现1.现在原创 2016-01-24 15:10:09 · 497 阅读 · 1 评论 -
51nod 1434 数论区间LCM问题
题意:一个整数序列S的LCM(最小公倍数)是指最小的正整数X使得它是序列S中所有元素的倍数,那么LCM(S)=X。例如,LCM(2)=2,LCM(4,6)=12,LCM(1,2,3,4,5)=60。现在给定一个整数N(1N,同时LCM(1,2,3,4,...,N-1,N) 整除 LCM(N+1,N+2,....,M-1,M),即LCM(N+1,N+2,....,M-1,M)是L原创 2016-01-23 16:45:37 · 1669 阅读 · 0 评论 -
hdu1536 博弈模板
题意就是给出一个数组s。为每次可以取石子的数目。然后给你n堆石子每堆si。求解先手能不能赢!标准的sg函数用法题目。#include #include #include using namespace std;int s[101];//存放每次可以取得石子,即可以进行的步骤int sg[10001]; //每个石子堆的sg函数值int k; //每次可以取石子的原创 2015-12-27 15:43:18 · 333 阅读 · 0 评论 -
格雷码的输出
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码例如当n为1的时候,格雷码为0,1;n为2的时候,格雷码为00,01,11,10;n为3的时候,格雷码为000,001,011,010,110,111,101,100;单纯从上面看,这样我们需要输入n的时候输出相应的格雷码应该怎么办?我们看上面的变换过程,假如我们知道了n-1时候的格雷码,怎么样求出n时候的原创 2015-12-21 16:53:54 · 1301 阅读 · 0 评论 -
求解二进制中1的个数
一:普通法int BitCount(unsigned int n){ unsigned int c =0 ; // 计数器 while (n >0) { if((n &1) ==1) // 当前位是1 ++c ; // 计数器加1 n >>=1 ; // 移位 } return c ;}这种原创 2015-12-20 20:31:22 · 440 阅读 · 0 评论 -
POJ 2891 般模线性方程组
题意:给出k个模方程组:x mod ai = ri。求x的最小正值。如果不存在这样的x,那么输出-1.由于这道题目里面的ai、ri之间不满足两两互质的性质,所以不能用中国剩余定理直接求解。X mod m1=r1X mod m2=r2.........X mod mn=rn首先,我们看两个式子的情况X mod m1=r1…………………………………………原创 2015-12-07 17:11:21 · 409 阅读 · 0 评论 -
Lucas hdu4349
题意:给出一个数字n,(1也就是C(n,i)%2==1的i的个数,其中(0解析:Lucas的应用,Lucas定理,见Lucas。根据Lucas有Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) 我们可以写成二进制的形式观察,比如 n=1001101,m是从000000到1001101的枚举,我们知道在该定理中C(0,1)=0,因此如果n=原创 2015-12-03 17:25:55 · 375 阅读 · 0 评论 -
哥德巴赫猜想 POJ2909
题意:求出有多少对素数的和等于n(n>=4并且n为偶数)解析:先用素数筛选法求筛选出素数,然后直接扫描一遍就可以了。简单数论#include #include #include #include #include using namespace std;const int maxn = 100000;bool prime[maxn+10];void getpri原创 2015-12-03 15:18:25 · 363 阅读 · 0 评论 -
hdu 5506
题意:有n组数组,每组有若干个数字。要求将这n组数组划分为L组,每组所有数组的交集不为空。数据量比较小。思路 :一共N个集合, 划分的个数为1…… N个, 所以当 L > N 时必然是不行的考虑如何取到最小的划分个数cnt, 如果 cnt 方法 : 记录所有的数出现过的次数每次都找一个出现次数最多的数, 将存原创 2015-10-30 20:56:23 · 454 阅读 · 0 评论 -
hdu 5505
题目意思:给定两个数字n和m,每次n都可以乘上一个自己的因子,求最少乘几次能得到m。分析:如果AAA大于BBB那么显然无解。考虑把AAA和BBB分解质因数。若BBB存在AAA没有的质因数也显然无解。对于某一个AAA的质因数的次数。为了加速接近BBB,它一定是每次翻倍,最后一次的时候把剩下的加上。那么答案就是最小的kkk使得2k∗Anum≥Bnum2^{k原创 2015-10-27 21:16:37 · 450 阅读 · 0 评论 -
基础数论模版
欧拉函数值,小于n且与n互质的数的个数#include #include #include #include using namespace std;const int maxn = 1000005;int p[maxn];//m[i]保存i的欧拉函数int Eular(int n){ //求解单独一个数字的欧拉函数值 int ans=n;原创 2015-10-27 19:02:48 · 476 阅读 · 0 评论 -
hdu5666 (数学水题)
标准解释:考虑一条以(0,0)(0,0)为起点,(x,y)(x,y)为终点的线段上格点的个数(不包含端点时),一定是gcd(x,y)-1gcd(x,y)−1,这个很显然吧.然后整个网格图范围内的格点数目是\frac {q*(q-1)} 22(q-1)∗(q−2).所以答案就是\frac {q*(q-1)} 2 -2q-1)∗(q−2)− 所有线段原创 2016-04-22 12:01:07 · 568 阅读 · 0 评论 -
hdu_5670 进制问题+数学水题
有一个机器,它有 m (2\leq m\leq 30)m(2≤m≤30) 个彩灯和一个按钮。每按下按钮时,最右边的彩灯会发生一次变换。变换为:1. 如果当前状态为红色,它将变成绿色;2.如果当前状态为绿色,它将变成蓝色;3.如果当前状态为蓝色,它将变成红色,并且它左边的彩灯(如果存在)也会发生一次变换。初始状态下所有的灯都是红色的。询问按下按钮 n (1\leq nn(1≤n2原创 2016-04-26 16:22:17 · 346 阅读 · 0 评论 -
hdu 5667
代码如下:#pragma warning(disable:4996)#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef原创 2016-04-22 13:37:53 · 323 阅读 · 0 评论 -
poj1942求组合数
就是一求组合数的问题。#include #include using namespace std;#define ULL unsigned long long intint main(){ ULL a, b; while (cin >> a >> b && (a || b)) { if (b > a) swap(a, b);原创 2016-06-01 14:25:36 · 318 阅读 · 0 评论 -
POJ 3252 Round Numbers(数学问题)
Round Numbers 就是一个表示成二进制的时候0比1多或者相等的正数。题目是给定一个区间,问在这个区间上的Round Numbers有多少个?(1 ≤ Start Finish ≤ 2,000,000,000).这个题目一看不怎么会写,其实仔细分析可以知道是一个数学题目。n很大,但是我们可以根据n的二进制的位数来计算,最多不超过33位。具体解法参考以下b原创 2016-06-01 13:02:16 · 401 阅读 · 0 评论 -
51nod 1005 大数加法(可为负数)
给出2个大整数A,B,计算A+B的结果。Input第1行:大数A第2行:大数B(A,B的长度 Output输出A + B没什么思路,就是转化为字符串之后模拟。#include #include #include #include using namespace std;int cons原创 2016-05-20 13:12:54 · 1303 阅读 · 0 评论 -
POJ 1845 数学问题
求A^B的所有约数(即因子)之和,并对其取模 9901再输出。 (0 我们首先要用到这样一个定理,数字A的所有因数之和,对于已经分解的整数A=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn)有A的所有因子之和为: S = (1+p1+p1^2+p1^3+...p1^k1) * (1+p2+p2^2+p2^3+….p2^k2) * (原创 2016-06-02 10:48:47 · 476 阅读 · 0 评论 -
POJ1019 数学+递推乱搞
有一个字符串的形式是这样的11212312341234512345612345671234567812345678912345678910123456789101112345678910..........现在要求你写出他的第n位上的数字是什么,是数字而不是数,1 ≤ n ≤ 2147483647。首先我们分析这个字符串可以看出它是由这些子串组成的,1,12,123,1234,12原创 2016-06-01 15:53:13 · 356 阅读 · 0 评论 -
大数加减乘除等的模板以及1000以内阶乘的模板
#include#include#include#include#include#include#includeusing namespace std;#define maxn 9999#define maxsize 1000#define dlen 4class BigNum{private: int a[1005]; //可以控制大数的位数 int le原创 2016-05-20 16:07:32 · 556 阅读 · 0 评论 -
CUGOJ 1682
经过一段时间的学习后,张同学发现小胡数学非常棒,于是决定追求数学成绩很好的女生小胡。小胡其实是想拒绝他的,但是小胡找不到好的说辞,于是提出了这样的要求:对于给定的两个正整数N和M,张同学随机选取一个N的因数Nf,小胡随机选取一个M的因数Mf,如果Nf和Mf相等,她就答应张同学。小胡让张同学去编写一个随机程序,到时候她看过程序没有问题了就可以用来抽签了。但是张同学写着写着,却越来越觉得机会渺茫。原创 2016-05-09 15:59:31 · 997 阅读 · 0 评论 -
51nod1119 机器人走方格 组合数学
M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。题目本身很简单,就是一个初中都推倒过的理论,只能向下或者向右的话,那么可能的路径一共有C(n+m,n)种。很好理解的这里就不说明了。现在我们要解决的是,当n和m都比较大的时候怎么讲结果计算出来。#include原创 2016-05-05 16:27:30 · 1450 阅读 · 0 评论 -
hdu5672 找字符串的子串问题
题目:给一个字符串,问有多少个子串至少含有k个不同的字母?有一个明显的性质:如果子串(i,j)包含了至少m个不同的字符,那么子串(i,k),(j因此对于每一个左边界,只要找到最小的满足条件的右边界,就能在O(1)时间内统计完所有以这个左边界开始的符合条件的子串。寻找这个右边界,是经典的追赶法(尺取法,双指针法)问题。维护两个指针(数组下标),轮流更新左右边界,同时累加答案即可。原创 2016-04-28 16:49:11 · 632 阅读 · 0 评论 -
hdu_5671 矩阵行列移动等
有一个nn行mm列的矩阵(1 \leq n \leq 1000 ,1 \leq m \leq 1000 )(1≤n≤1000,1≤m≤1000),在这个矩阵上进行qq (1 \leq q \leq 100,000)(1≤q≤100,000) 个操作:1 x y: 交换矩阵MM的第xx行和第yy行(1 \leq x,y \leq n)(1≤x,y≤n);2 x y: 交换矩阵MM的第xx列和原创 2016-04-26 18:40:03 · 591 阅读 · 0 评论 -
快速判断一个数字是否是素数
//num可以达到10^9数量级甚至更大,比一般的判断方法快很多bool isPrimeNum(int num){ if (num <= 2) { return num == 2; } if (num % 2 == 0) { return false; } int iSqrt = sq原创 2015-08-16 11:25:34 · 527 阅读 · 0 评论