
数学数论
xiaofengsheng
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
中国剩余定理
中國剩餘定理/中国剩余定理2008-05-25 15:37如要討論中國利餘定理,同餘(congruence)的概念可算是必須,但因當中可能有較複雜的混算或較高層次的數學,請讀者忍耐。 給定一個正整數n,我們說兩個數a、b是對模n同餘,如果a-b是n的倍數。用符號a≡b(mod n)來代表。一般來說,a≡b(mod n)等同於a=b+kn,而a,b,k,n都是转载 2009-02-25 10:01:00 · 750 阅读 · 0 评论 -
pku 2115 C Looooops 同余定理
#include long long mod(long long a,long long b) { return (a % b + b) % b; } struct triple { long long d,x,y; }; long long Euclid(long long a,long l原创 2009-11-17 22:49:00 · 982 阅读 · 0 评论 -
pku 1150 The Last Non-zero Digit 阶乘最后一位非零数
#include int digits[10];long long power(long long a, long long b){ if(b == 0) return 1; else if(b == 1) return a; long long temp = power(a, b/2); if(b%2) return a*temp*temp;原创 2009-11-19 13:35:00 · 3247 阅读 · 3 评论 -
pku 1061 青蛙的约会 同余方程
#includelong long mod(long long a,long long b){ return (a % b + b) % b;}struct triple{ long long d,x,y;};long long Euclid(long long a,long long b){ if(b == 0) return a;原创 2009-11-17 17:23:00 · 785 阅读 · 0 评论 -
[转]pku数学类算法题目小结
感觉总结的比较全面,转给大家: pku 1150 The Last Non-zero Digit 和计算排列数末尾有多少个零有些类似,把2,5因子都拿出来,剩下的数的最后一个数字只有1,3,7,9。只有各位上的数字才会影响最后一个非零数字。统计可以用递归来统计,求出1~n中因子2,5的个数,以及3,7,9结尾的数和去掉2,5后新的到的数中3,7,9结尾的数。结果就是 2^(dig[2原创 2009-11-19 18:12:00 · 1515 阅读 · 0 评论 -
pku 1891 Strange Way to Express Integers 同余方程组
一般我们求的同余方程组mod 的数是两两互素的,可以直接用孙子定理(中国剩余定理)求解。然而本题mod的数可能不是互素,所以要转换一下再求。x=b1(mod a1); 1)x=b2(mod a2); 2)a1*x1+b1=x=b2(mod a2)所以a1*x1+b1=b2(mod a2) a1*x1=(b2-b1)(mod a2)我们知道形如AX=B(mod p)的同余式可用扩原创 2009-11-18 12:46:00 · 699 阅读 · 0 评论 -
同余公式和性质
基本性质:(1)若p|(a-b),则a≡b (% p)。例如 11 ≡ 4 (% 7), 18 ≡ 4(% 7)(2)(a % p)=(b % p)意味a≡b (% p)(3)对称性:a≡b (% p)等价于b≡a (% p)(4)传递性:若a≡b (% p)且b≡c (% p) ,则a≡c (% p) 运算规则:模运算与基本四则运算有些相似,但是除法例外。其规则如原创 2009-11-15 12:25:00 · 8512 阅读 · 0 评论 -
[转]经典讲解: 扩展欧几里德算法 线性同余方程 中国剩余定理
欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数 假设d 是(b,a转载 2009-11-15 17:06:00 · 2525 阅读 · 1 评论 -
GCD ExGCD 扩展欧几里德算法证明与算法
#include using namespace std;//扩展欧几里德算法int ExGCD(int a, int b, int& x, int& y){ if(b == 0) { x = 1, y = 0; return a; } int d = ExGCD(b, a%b, x, y); int temp = x; x = y; y原创 2009-11-15 17:02:00 · 6905 阅读 · 0 评论 -
pku2100 连续数的平方和
#include #include int ret1[10000001];int ret2[10000001];int main(){ int i, j; int cnt = 0; __int64 N; scanf("%I64u", &N); __int64 base = 0; int r = (int)sqrt((float)N);原创 2009-11-13 11:48:00 · 655 阅读 · 0 评论 -
pku 2346 乘法原理
#include #include using namespace std;int hash[46];int main(){ int n; scanf("%d", &n); __int64 sum; for(__int64 i = 0; i < (__int64)pow(10.0, n/2); ++i) { sum = 0; __int64 p原创 2009-04-13 16:39:00 · 599 阅读 · 0 评论 -
pku 1017 水题不水
#include using namespace std;int main(){ int num, m, n, l, x, y, z;// m:1*1 n:2*2 l:3*3 x:4*4 y:5*5 z:6*6 int u[4] = {0, 5, 3, 1}; int left1; // 1*1 int left2; // 2*2 while(scanf("%d%d原创 2009-03-18 20:33:00 · 1058 阅读 · 2 评论 -
pku 1844 一道关于数学的水题
#include using namespace std;int main(){ int n; scanf("%d", &n); int i, sum = 0; bool OverFlag = false; for(i = 1;; i++) { sum += i; if(sum == n) { printf("%d/n", i);原创 2009-03-16 19:20:00 · 632 阅读 · 0 评论 -
pku 2085 纯粹找规律
//AC Code#include #define Swap(x,y) {int temp = x;x = y;y = temp;}#define MAX 50001int map[MAX];bool hash[MAX];int main(){ int i, j, k, n, v; while(scanf("%d%d", &n, &v) && n != -1)原创 2009-03-15 18:27:00 · 688 阅读 · 2 评论 -
pku 2247
#include int main(){ int n; int i,j,k; int digit; int MIN; int prime[5]={0,2,3,5,7}; long long result[5843]; result[1]=1; for(i=2;i<=5842;i++) {原创 2008-12-22 12:41:00 · 698 阅读 · 0 评论 -
pku 1006
#include using namespace std;int main(){ int p,e,i,d, result; int n = 0; while(scanf("%d%d%d%d",&p, &e, &i, &d) && !(p == -1 && e == -1 && i == -1 && d== -1)) { result = (5544*p + 144原创 2009-02-25 12:47:00 · 902 阅读 · 0 评论 -
乘方(幂)算法比较
#include #include //m>=0, n>=0int power1(int m, int n){ if(n == 0) return 1; if(n == 1) return m; if(n&1) return m*power1(m, n-1); else { int v = power1(m, n>>1);原创 2010-03-28 23:59:00 · 1096 阅读 · 1 评论