数论
文章平均质量分 68
玩世彳不恭
这个作者很懒,什么都没留下…
展开
-
HDU 1005 Number Sequence
题目链接:Number Sequence解题思路:矩阵幂就可以实现,注意n为1或者2的时候要特判一下。#include#include__int64 ans[2][2], tem[2][2];void mutl(__int64 a[2][2],__int64 b[2][2]){ __int64 c[2][2]; int i, j, k;原创 2013-07-21 18:22:50 · 432 阅读 · 0 评论 -
HDU 1576 A/B
题目链接:A/B解题思路:原创 2014-11-04 20:40:33 · 365 阅读 · 0 评论 -
Miller_Rabin素数测试
Miller_Rabin素数测试算法原理原创 2014-11-05 21:24:10 · 443 阅读 · 0 评论 -
POJ 2429 GCD & LCM Inverse
题目链接:GCD & LCM Inverse解题思路:这个给了原创 2014-11-06 10:55:24 · 475 阅读 · 0 评论 -
Pallord rho大整数分解
Pallord rho算法算法原理,原创 2014-11-06 11:09:44 · 567 阅读 · 0 评论 -
数论总结(不断更新中)
1.欧几里得算法原创 2014-11-05 22:21:02 · 369 阅读 · 0 评论 -
康托展开
康托展开S = a[n] * (n)! + a[n - 1] * (n - 1)! + a[n - 2] * (n - 2)! + ......... + a[1] * 1! + a[0] * 0!;设由一个排列P = 4321, 则p[3] = 4, p[2] = 3, p[1] = 2, p[1] = 1,我们的a[n]表示sum(1 | a[j] i),就是当前这一项后比这原创 2014-12-19 15:10:02 · 426 阅读 · 0 评论 -
C语言ran()伪随机数破解
Rand()破解首先我们知道的是随机数发生器是Xn = (A * (Xn - 1) + C) % M然后种子就是里面的Xn的序列,上一个结果变为下一个的种子。那么随机数是怎么输出的呢?首先这种随机方式的前16位的随机效果好,然后讲它MOD 32768,为什么是32768应为rand的取值范围就是0~32767,你可以随机1000W个随机数试试取最大值看是不是32768。原创 2014-12-19 20:54:20 · 8432 阅读 · 5 评论 -
欧拉函数
欧拉函数欧拉函数φ(n)表示的是比n小并且和n互素的正整数的个数(1也包括)。P为素数φ(P) = P - 1,这里由于P是素数,所有比P小的数都和P互素P和Q为两个互质的正整数φ(P*Q) = φ(P) * φ(Q)(对于任意的两个素数来说如果φ(P*Q) =φ(P) * φ(Q)则为积性函数,如果对于任意两个正数来说φ(P * Q) =φ(P)原创 2015-03-23 21:26:48 · 548 阅读 · 0 评论 -
HDU 5072 Coprime
题目链接:Coprime原创 2014-11-01 13:24:41 · 342 阅读 · 0 评论 -
HDU 4549 M斐波那契数列
题目链接:M斐波那契数列解题思路:随便原创 2014-10-30 14:16:27 · 358 阅读 · 0 评论 -
HDU 5073 Galaxy(数学公式)
题目链接:解题思路:原创 2014-10-22 22:37:47 · 646 阅读 · 0 评论 -
HDU 2817 A sequence of numbers
题目链接:A sequence of numbers解题思路: (a * b) % m = ((a % m) * (b % m)) % m 等比数列就用快速幂,否则超时。#include#include#define MAX 200907__int64 seq[5];void call(__int64 q, int k){ k--; while(k){原创 2013-07-20 21:30:24 · 443 阅读 · 0 评论 -
HDU 1006 Tick and Tick
题目链接:Tick and Tick解题思路:这道题要不是看了别人的博客还是做不出来的,刚开始我想得是按秒来暴力,但是小数点后面几位一直不对,后来知道了要按照分钟来找,把每分钟happy的秒数求出来,这个秒数不一定是整数,应为求出的区间不一定前后都是整数。设时间为h:m:s,角度为rh:rm:rs,那么rs = 6 * s; rm = 6 * m + 0.1 * s; rh =原创 2013-07-22 12:34:10 · 611 阅读 · 0 评论 -
HDU 1262 寻找素数对(素数筛选法)
题目链接:寻找素数对解题思路:打素数表。#include#include#define MAX 10010bool v[MAX];int n;void getPrime(){//筛选素数 int i, j; memset(v, true, sizeof(v)); for(i = 2; i <= MAX; i++){ for(j = 2; j *原创 2013-08-08 12:02:00 · 486 阅读 · 0 评论 -
POJ 2151 Check the difficulty of problems(概率DP)
题目链接:Check the difficulty of problems解题思路:分类里面分到了hash,但是怎么都想不通,最后看了discuss里面的这是概率+DP,概率就是拿他每一队做出题的概率(1 - 每一题都做不出)相乘再 减去 每队做出的题都没有达到期望n的概率的积。但是算题目的概率的话组合方式有很多种,包含了很多不必要的乘法步骤,暴力求解的话肯定会超时。看了一个人的博客找原创 2013-08-24 17:19:43 · 492 阅读 · 0 评论 -
大数运算(自己练习)
今天遇见大数问题,不想以后再求模板了,想自己写一个能用的可能里面有些错误,后续会在使用过程当中慢慢改正#include#include#define MAX 500typedef struct A{ int num[MAX]; int len; A(){ memset(num, 0, sizeof(num)); len = 0; } A(in原创 2013-12-19 18:29:02 · 524 阅读 · 0 评论 -
大数模板
看见个比较好的模板,留下来自己用#include #include #include #include using namespace std; #define MAXN 9999#define MAXSIZE 10#define DLEN 4class BigNum{ private: int a[500]; //可以控制大数的位数转载 2013-12-19 15:47:24 · 410 阅读 · 0 评论 -
HDU 1133 Buy the Ticket
题目链接:Buy the Ticket解题思路:当你去寻找M个入栈和N个退栈的序列的时候,其中有许多不能满足题意的。但是根据Catalan数的证明方法类似联想到,当每一组非法序列到K的位置的时候正好出现非法的情况,再将前面K位的全部数字翻转,1变为0,0变为1。这样由于前面部分的1变得比0多了1,最终导致全部的1多了一个,全部的0少了一个。就是m + 1和n - 1.由之前证明Catalan数原创 2013-12-21 22:01:29 · 413 阅读 · 0 评论 -
HDU 1267 下沙的沙子有几粒?
题目链接:下沙的沙子有几粒?解题思路:这题和1133的差不多,只不过每一个H和D都没有分别,所以上一题的基础之上,除去n!和m!。#include#include#define MAX 1000typedef struct A{ int num[MAX]; int len; A(){ memset(num, 0, sizeof原创 2013-12-21 22:35:51 · 491 阅读 · 0 评论 -
HDU 1695 GCD
题目链接:GCD解题思路:一开始搜莫比乌斯反演的时候找到的,结果不会,后来看discuss里面说容斥原理+欧拉函数,那么要求gcd(x, y) = k就可以转化为gcd(x / k, y / k) = 1,那么就是互素的数队。欧拉函数表示的就是小于n并且和n互素的数。所以对于区间[1,a][1, b](a 设Q = I * J * K 我们要减去[1,a]内I, J, K的倍数,就是(a原创 2015-03-25 14:29:30 · 426 阅读 · 0 评论