![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
文章平均质量分 66
皮卡丘来了
淡定
展开
-
中国剩余定理
注:此文章适合有一定数论基础的同学阅读...神牛解释来源: http://blog.sina.com.cn/s/blog_93ced90c0101716k.html中国剩余定理要求n = n1 * n2 * ... * nk中所有的数要两两互质,那么当给出的数据不是两两互质时要怎么处理呢?为什么中国剩余定理要求n1,n2,...,nk两两互质呢?因为这样就可以保证mi =原创 2012-11-22 21:48:01 · 695 阅读 · 0 评论 -
欧拉函数(一)
如果你有了数论书上第一节和第二节的基础,那么你对欧拉函数的理解就更简单了,数论教材 第一节:同余的概念及其基本性质 第二节:剩余类及完全剩余系首先我们要知道几个概念: 同余定义:例如:x1 % m = r原创 2012-11-20 12:46:38 · 1035 阅读 · 0 评论 -
HDU 3049 求逆元模板
密码学里面的逆元是什么意思?详细点,别抄百度百科里面的!问题补充:还有11的负一次方等于19是怎么回事?满意回答2011-04-11 00:10逆元是模运算中的一个概念,我们通常说A是B模C的逆元,实际上是指AB=1 (mod C),也就是说A与B的乘积模C的余数为1。可表示为A=B^(-1) mod C。逆元是积性函数, 补充:假定原创 2012-11-21 20:57:23 · 1065 阅读 · 0 评论 -
HDU 1787 简单的求欧拉函数 POJ 2047 裸欧拉函数
HDU 1787题目好水,题目意思要你求最大公约数大于1的个数..#include#includeusing namespace std;int euler(int n){ /// 把公式翻译成代码就行了.. int sum=1; for(int i=2;i*i int a=0; if(n%i==0){原创 2012-11-23 17:36:28 · 762 阅读 · 0 评论 -
POJ 1061 青蛙的烦恼
没什么说的,把公式求出来,先求一组特解,最后得需要的解...思路:设青蛙要跳x次才相遇, 可得方程 (a+xm)%L = (b+xn)%L 推出 x(m-n) + yL = b-a. 根据扩展欧几里德算法可求出一组x(m-n) + yL = gcd(m-n, L)的一组解, 当(b-a)为gcd(m-n, L)的倍数时原方程才有整数解, 现在要求求最小的跳动次数x, 思想参考了Come原创 2012-12-14 18:12:32 · 890 阅读 · 0 评论 -
HDU 1060 数论
/*要你求最左边的数值,lg(k) = lg(n^n) = n*lg(n);所以 k = 10^(n*lg(n)); 因为 10^n 最左边是 1 ,所以 只需要求的 10^(lg(n)) * 10^n 的值,也就是要求的 10^(lg(n)) 的值就行... */#include#includeusing namespace std;int main(){ in原创 2012-12-27 19:49:38 · 671 阅读 · 0 评论 -
POJ 3126 素数+广搜
题意:给你两个四位的素数,从 n - > m 要变换几回...思路:素数打表 + 广搜,因为好久没写搜索了,所以卡了好久才1过了,用一般的对列,再用一个数组记录它的步数,就OK了..#include#include#includeusing namespace std;#define manx 25000int n,m,pos[manx],mark[ma原创 2012-11-27 13:19:33 · 1004 阅读 · 0 评论 -
HDU 1905 伪素数
因为对伪素数不是很了解,所以一直纠结着...伪素数定义:(1)一定不是素数 (2)符合费马小定理 a^p==a(mod p);题目没什么好说的...#include#includeusing namespace std;int jude(int n){ ///判定素数 for(int i=3;i*i原创 2012-11-24 16:53:27 · 1324 阅读 · 0 评论 -
HDU 1852 快速求幂
题目wa了好多回..悲催...不能直接求逆元来计算,还是要用到数论中的小技巧啊...贴神牛的题解吧..// 这题主要求S// 结论: S = (251^(n+1)-1) * (2^(3n+1)-1) / 250 // 是两个等比数列和相乘 // // 推理:// 2008 = 2^3 * 251 // 所以 2008^N 有 3N 个 2 和 N 个251 //原创 2012-11-24 15:11:18 · 1071 阅读 · 0 评论 -
欧拉函数(二)
此文章纯属原创,内容来源:北大老师的视频教学..把这个定理的证明弄明白真不容易啊,懂了这个定理,个人觉得欧拉函数就真的不难了... 定理:若 m, n 是两个互质的整数,x, y 分别是通过模 m, n 的简化剩余系,则 n*x + m*y 是通过 m*n 的简化剩余系. 换种写法:x = { x1,x2,x3,x4.... xE(m)} 是mod m原创 2012-11-20 23:31:16 · 1222 阅读 · 0 评论 -
扩展欧几里德算法
之前见过若干解二元一次不定方程解法,都看的个一知半解的...方法(1):数论书上的定理来解答...说实话定理的理解和证明真心的不简单.....方法(2): a = q1*b +r1; r1 = a - q1*b; b = q2*r1+r2; r2 = - q2*a原创 2013-01-09 16:40:37 · 790 阅读 · 0 评论 -
HDU 3579 模余方程
/*HDU 3579不一定互质情况,神牛公式解析链接:http://yzmduncan.iteye.com/blog/1323599把推导过程翻译成代码即可... */#include#include#includeusing namespace std;typedef long long ll; ll gcd(ll a,ll b){ if(b==原创 2013-01-12 11:11:53 · 819 阅读 · 0 评论 -
RSA 入门密码机制解读
/*数论基础,以模余方程制造密码,求模 mod 的 k 次根,对密码解读... RSA解密: 通过知道的 mod,和 k ,然后进行对密码破密....*/#include#include#include#define manx 500using namespace std;long long oula(long long m){ ////欧拉函数 int su原创 2013-01-15 14:18:08 · 813 阅读 · 0 评论 -
HDU 1211 RSA 解密
/*数论基础,以模余方程制造密码,求模 mod 的 k 次根,对密码解读... RSA解密: 通过知道的 mod,和 k ,然后进行对密码破密....*/#include#include#include#define manx 50000using namespace std;long long kzgcd(long long a,long long b,long lon原创 2013-01-15 15:27:02 · 1023 阅读 · 0 评论 -
计算模 m 的 k 次根
真心说声,不明白古人为什么那么聪明,由一个最简单的带余除法引申出如此之多的智慧...题目:已知 x^k = b ( mod m ) , ( b, m ) = 1, ( E(m), k ) = 1; 告诉你 k, b, m 的值, 要你求:x 的值 储备知识:(1) 如果b^k = 1 ( mod m ),则 ( b^k )^t = 1 ( mod m ) , t = 1, 2, 3原创 2013-01-14 20:47:07 · 1114 阅读 · 0 评论 -
素数普遍公式
公式:y = ( 2^x - 2 ) / x ; 其中 x , y 一定是整数,当 x 取素数的同时,y 一定是整数....证明: 小头猪(971880342) 11:31:04我是这样分析的: 不知道对不对,素数2另外证,如果x是素数,那么x*y=2^x - 2==》(1/2) * y * x = 2^(x-1) - 1 ; 说明 y 一定是仅含有一个2因子的偶数,原创 2012-11-27 12:42:59 · 8127 阅读 · 2 评论 -
POJ 2191 梅森素数
/*梅森素数:若 2^p - 1 是一个素数,则 p 就是梅森素数,前几个有:2 3 5 7 13 17 19 31.... 非打表算法神牛博客:http://www.cnblogs.com/tmeteorj/archive/2012/10/02/2710444.html唉,我是打表过的...非打表的不知道错了几会...题意:判断所有质数i<=k,2^i-1是否是质原创 2012-11-27 21:10:22 · 1257 阅读 · 0 评论 -
POJ 哥巴猜想
/*POJ 2262 哥巴猜想:每个偶素(n >= 4)都可表示成两个素数之和 思路: 打表 */#include#include#define manx 1000009using namespace std;bool s[manx];void prime(){ for(int i=0;i<manx;i++) s[i]原创 2013-01-14 11:30:26 · 1608 阅读 · 0 评论 -
中国剩余定理模板(2)出现不互质情况
蛋疼的说,如果出现不互质的情况,那就成解线性模余方程组了神牛博客地址: http://yzmduncan.iteye.com/blog/1323599/** 中国剩余定理(不互质) */ #include #include #include using namespace std; typedef __int64 int64;原创 2012-11-22 23:11:08 · 1207 阅读 · 0 评论 -
HDU 1788 模余运算
题目 http://acm.hdu.edu.cn/showproblem.php?pid=1788题意:中文..解题思路:模余运算,模板题,目前自己不能直接拍出来,但是理解它绝对没问题...#include#includeusing namespace std;typedef __int64 int64;int64 a[30],b[30],mod;int64 g原创 2012-11-23 19:11:45 · 855 阅读 · 0 评论 -
中国剩余定理模板(1) 两两互质情况
两两互质的情况....如果不互质的话,那么就成了解线性模余方程了..先看神牛的吧,我的代码好乱,主函数的输入有些不一样#include #include #include using namespace std; typedef __int64 int64; int64 a[15],b[15]; int64 Extend_Euc原创 2012-11-22 23:00:21 · 1090 阅读 · 0 评论 -
袁师兄数论模板
1、求最大公约数,最小公倍数;int gcd(int x, int y){ if( 0==y ) return x; else return gcd( y, x%y );}int lcm(int x, int y){ return x/gcd(x,y)*y;} 2、素数筛选//筛选法计算素数;最大范围1000000; #define maxn原创 2012-11-15 22:09:12 · 697 阅读 · 0 评论 -
POJ 2638 筛选法的经典运用
这道题目坑了多久就不说了,最初看错了题意,以为数值最大范围在0 ~ 1000000;交上去WA了,在仔细看了下题目,原来是我太天真...数据真大啊,但是我们发现它只是要取连续的1000000区间值,但是我们知道 2,147,483,647 开下方,如果不能被0 ~ 2,147,483,647^(1/2) 中的质因子整除,那它必然是一个质数...所以就要先把 0 ~ 2,147,483,6原创 2012-11-29 14:04:37 · 823 阅读 · 0 评论 -
HDU 1397 POJ 2262 数论水题.
HDU 1397题意:给你一个结论,要你证明:n = p1 + p2..#includeusing namespace std;#define manx 40000bool s[manx];void prime(){ for(int i=0;i s[i]=0; for(int i=2;i if(!s[i]){原创 2012-11-17 17:39:49 · 717 阅读 · 0 评论 -
一些数论的公式
以下等式或者不等式均可以用数学归纳法予以证明!1 + 3 + 5 + ... + (2n - 1) = n^21*2 + 2*3 + 3*4 + ... + n*(n + 1) = n*(n + 1)*(n + 2) / 31*1! + 2*2! + 3*3! + ... + n*n! = (n + 1)! - 11^2 + 2^2 + 3^2 + ... + n^转载 2012-11-29 16:38:44 · 1309 阅读 · 0 评论 -
POJ 1730 幂指数的最大值 + 精度 + C函数
这道题,唉,经验不足哇,之前想的若干方法,均超时了,从枚举因子 1 - > n^(1/2) 开始,TLE,再想了一个,分解成所有质因子,判断最小的质因子个数是否整除其它质因子个数,显然和前面一样,n 取很大的时候就不行了,也会TLE..于是就要想更好的方法,可能是我做题太少了,就去网上找了一下别人解法,一下子反应过来了,干脆直接开根号,判断得到的值是否是整数...就要用到 pow( n, 1原创 2012-11-28 16:16:34 · 1022 阅读 · 0 评论 -
POJ 1595 素数切
题目没什么,1A过,关键要把弄懂题意,英文差的孩子是伤不起额...题意:给定你一个数n,让你求出1-n内有多少个素数,再给你一个数d,如果2*d大于素数的个数则全部输出;否则,如果个数为单数,输出2*d - 1个并且以中间那个素数为中心分别向两边输出d-1个;如果偶数个,输出2*d个,也是以中间那个素数为中心向两边扩展;#include#includeusing names原创 2012-11-27 17:15:41 · 687 阅读 · 0 评论 -
POJ 1365 因子分解
题意:给一个整数n的素数因子指数序列:p0^e0,p1^e1,……pi^ei.它表示n=p0^e0*p1^e1*……*pi^ei(其中pi为素因子)。现在让你求n-1这个数的素因子指数序列,而且是按素因子降序输出。#include#includeusing namespace std;string s;int a[1000];int num;void init(){原创 2012-11-26 17:02:58 · 1008 阅读 · 0 评论 -
HDU 1333 分解素数因子
这题真的没什么说的,用暴力吧.. #includeusing namespace std;#includeint fan(int n1){ int sum=0; while(n1>0){ sum += n1%10; n1 /= 10; } return sum;}int main(){原创 2012-11-17 13:27:23 · 881 阅读 · 0 评论 -
HDU 1239 素数筛选+枚举
这题没什么好说的...水题..#include#includeusing namespace std;#define manx 100009bool s[manx];int p[manx];int num;void prime(){ for(int i=0;i s[i]=0; p[manx]=0; } for(int原创 2012-11-16 17:57:37 · 653 阅读 · 0 评论 -
HDU 1573 中国剩余定理(有不互质情况)
因为有不互质的情况,所以这道题不能直接用中国剩余定理来求,需要用最原始的方法,解线性模余方程组来求,方法用到扩展欧几里德算法....#include #include #include using namespace std; typedef __int64 int64; int64 Mod; int64 gcd(int64 a原创 2012-11-22 23:43:13 · 900 阅读 · 0 评论 -
HDU 1395 数论小技巧
数论中小技巧:因为每次只需要一个大数 mod n 的余数,所以为了计算机运算的方便,先进行转换一下.. ( a * b ) % n = [ ( a % n ) * ( b%n ) ] % n ; ( a + b ) %n = [ ( a%n ) +( b%n ) ] %n ;题意:中原创 2012-11-21 16:51:05 · 948 阅读 · 0 评论 -
HDU 1452 因子和+积性函数+逆元
神牛的解释太精辟了,难以解释的好...此题神牛链接http://www.cppblog.com/vontroy/archive/2010/10/02/128356.html 计算 2004^X的因子和 s(2004^X) mod M, M=29 s(2004^X)%29 因子和 s是积性函数,即 :gcd(a,b)=1==> s(a*b)= s(a)*s(b) 20原创 2012-11-21 17:57:29 · 681 阅读 · 0 评论 -
韩信点兵---数论趣题
题目:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?” 按照今天的话来说:一个数除以3余2,除以5余3,除以7余2,求这个数... 目前我还不明白孙子定理(中国剩余定理)..所以给出自己的笨方法... 解: 设这个数为 n , 则: n % 3==2; n % 5==3; n % 7==2;原创 2012-11-19 16:44:09 · 2022 阅读 · 0 评论 -
HDU 2669 扩展欧几里德求二元不定方程,超水..
看完数论数的这一段,觉得这个算法太精辟了,其实扩展欧几里德算法就是书上的公式翻译成代码,实在是太棒了,我还SB似的去纠结过程,其实自己已经会笔算了可是书上的第二种解二元一次不定方程方法,目前还在纠结中...运用的定理中的推论得出一定存在整数 x , y 使得 ax + by =gcd( a,b); 成立. 同样有定理得到如果 ax + by = n 有解,则 gcd( a,b ) |原创 2012-11-16 14:14:06 · 1165 阅读 · 0 评论 -
HDU 1576 扩展欧几里德算法求二元一次不定方程
看完数论数的这一段,觉得这个算法太精辟了,其实扩展欧几里德算法就是书上的公式翻译成代码,实在是太棒了,我还SB似的去纠结过程,其实自己已经会笔算了可是书上的第二种解二元一次不定方程方法,目前还在纠结中...运用的定理中的推论得出一定存在整数 x , y 使得 ax + by =gcd( a,b); 成立. 同样有定理得到 如果 ax + by = n 有解,则 gcd( a原创 2012-11-16 13:13:11 · 936 阅读 · 0 评论 -
HDU 1124 求末尾0的个数,函数 [ x ] , { x } 在数论中的小应用
本题考察数论中的一个高斯函数的定理,明白了它,感觉它真的很精彩...定理:在 n! 中的标准分解式中质因数 p ( p h = [ n/p ] + [ n/p^2 ] + [ n/p^3 ]+.....题意:要你求 N! 计算后,从个位开始出现多少个连续的零...运用定理水解该题...思路找出 2 和 5 个数最小的一个..#includeusing namespace s原创 2012-11-16 15:42:15 · 667 阅读 · 0 评论 -
HDU 1299 素数筛选+求因子个数
求因子个数,很简单,,求出每个质因子的个数,,然后简单组合数学解决以下是网上摘的...想到了都是这样写的.../**************************************************首先我们知道x、y都是大于n的数 假设y=n+k (k>=1) 带入1/x+1/y=1/n,求出x=n*(n+k)/k -> x=n^2/k + nx固然是一个整数,所原创 2012-11-16 22:37:53 · 686 阅读 · 0 评论 -
xumOJ 1447 积性函数
/*xmu 1447 积性函数 题解:当 (a,b)=1; 则 f(a*b)=f(a)*f(b);x[i] 表示欧拉函数sum[i] 表示因子个数p[i] 表示第 i 个素数 */#include #include #include #include #define manx 1000001 using namespace std; int x[manx原创 2013-03-19 14:31:33 · 889 阅读 · 0 评论