文章分类 -  数论

摘要:#include <stdio.h>typedef long long LL;#define MAXN 100#define MOD 9901LL A,B;const LL phiN=9900;struct PNode{ LL p; LL n;}pri[MAXN];int idx;void findPri(LL n){ idx=0; for(LL i = 2; i*i <= n;... 阅读全文
posted @ 2010-09-15 20:49 菜到不得鸟 阅读(262) 评论(0) 推荐(0)
摘要:#include <stdio.h>typedef long long LL;LL ext_gcd(LL a,LL b,LL &x,LL &y){ if(!b) { x = 1; y = 0; return a; } LL g = ext_gcd(b,a%b,x,y); LL t = x; x = y; y = t - a/b * y; return g;}inline... 阅读全文
posted @ 2010-09-15 16:55 菜到不得鸟 阅读(185) 评论(0) 推荐(0)
摘要:200MS左右:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>typedef unsigned long long LL;#define TIMES 10LL C,E,N,P,Q,phiN;LL mult_mod(LL a,LL b,LL m) //(... 阅读全文
posted @ 2010-09-15 00:08 菜到不得鸟 阅读(179) 评论(0) 推荐(0)
摘要:2 <= N < 2^54,巨恶心...一些数据,只有前4个是Prime18235180143985094819314681010000095611105172929440956052361118901521172947529216821881228842209//390-650MS://rand() % X + Y = [Y,X+Y)#include <stdio.h>#... 阅读全文
posted @ 2010-09-13 22:49 菜到不得鸟 阅读(568) 评论(0) 推荐(0)
摘要:素数的测试:费尔马小定理:如果p是一个素数,且0<a<p,则a^(p-1)%p=1. 利用费尔马小定理,对于给定的整数n,可以设计素数判定算法,通过 计算d=a^(n-1)%n来判断n的素性,当d!=1时,n肯定不是素数,当d=1时,n 很可能是素数.二次探测定理:如果p是一个素数,且0<x<p,则方程x^2%p=1的解为:x=1或 x=p-1. 利用二次探测定理,可以再利... 阅读全文
posted @ 2010-09-13 01:27 菜到不得鸟 阅读(6946) 评论(0) 推荐(0)
摘要:#include <stdio.h>inline int numOf2(int n){ int s=0; while(n>>=1) s+=n; return s;}int main(){#ifndef ONLINE_JUDGE freopen("tdata.txt","r",stdin);#endif int n,k; while(scanf("%d %d",&n,... 阅读全文
posted @ 2010-09-12 23:45 菜到不得鸟 阅读(86) 评论(0) 推荐(0)
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1141即给出e,n,c(c即密文),求明文,先求出phi函数就ok了.#include <stdio.h>typedef long long LL;#define MAXN 32005int e,n,c;int pn,prime[MAXN],phi[MAXN]={0,1};void ca... 阅读全文
posted @ 2010-09-12 19:44 菜到不得鸟 阅读(182) 评论(0) 推荐(0)
摘要:#include <stdio.h>typedef long long LL;LL p,q,e,n,phin,x,y;void ext_gcd(LL a, LL b) // gcd(a,b) = ax+by{ if(!b) { x = 1; y = 0; return; } ext_gcd(b, a%b); LL t = x; x = y; y = t - ( a / b) * y;}... 阅读全文
posted @ 2010-09-12 19:12 菜到不得鸟 阅读(279) 评论(0) 推荐(0)
摘要:RSA算法RSA算法描述*RSA是Rivet,Shamir和Adleman于1978年在美国麻省理工学院研制出来的,它是一种比较典型的公开密钥加密算法。*基础大数分解和素性检测——将两个大素数相乘在计算上很容易实现,但将该乘积分解为两个大素数因子的计算量是相当巨大的,以至于在实际计算中是不能实现的。1.RSA密码体制的建立:(1)选择两个不同的大素数p和q;(2)计算乘积n... 阅读全文
posted @ 2010-09-12 19:07 菜到不得鸟 阅读(7260) 评论(0) 推荐(1)
摘要:和hdu1999( 不可摸数)差不多吧。。。#include <stdio.h>#define MAXN 500010int sum [MAXN];void init(){ int lim = 250005; for(int i=1;i<lim;i++) { for(int j=i+i;j<MAXN;j+=i) sum[j] += i; }}int main(){ #ifn... 阅读全文
posted @ 2010-09-12 08:53 菜到不得鸟 阅读(95) 评论(0) 推荐(0)
摘要:#include <stdio.h>typedef long long LL;LL exp_mod(LL a,LL n,int m)//a^n(mod m){ //141MS int bit[64],i=0; while(n) { bit[i++] = n & 1; n >>= 1; } LL s = 1; for(int j=i-1; j>=0; j--) ... 阅读全文
posted @ 2010-09-11 09:52 菜到不得鸟 阅读(206) 评论(0) 推荐(0)
摘要:此题暴力求解必定超时,一般计算机计算一亿次就为一秒,L超过了20亿所以显然不行。其中一种方式是利用相对性,把速度慢的青蛙看成静止,而速度快的青蛙去追赶速度慢者。设m速度快 n速度慢,那么他们开始距离就为dist=(y-x+l)%l。设m青蛙的坐标为0,n青蛙坐标为dist且设经过k时间,跑了i圈之后m青蛙跑到了n青蛙的坐标。那么就有下列式子:(m-n)*k==l*i+dist;假如p为(m-n)与... 阅读全文
posted @ 2010-09-11 09:51 菜到不得鸟 阅读(693) 评论(0) 推荐(1)
摘要:http://hi.baidu.com/zd987/blog/item/9d2ebc31c64133a45edf0e5c.html在程序中利用欧拉函数如下性质,可以快速求出欧拉函数的值(a为N的质因素)(1) 若(N%a==0 && (N/a)%a==0) 则有:E(N)=E(N/a)*a;(2) 若(N%a==0 && (N/a)%a!=0) 则有:E(N)=E(... 阅读全文
posted @ 2010-09-11 09:50 菜到不得鸟 阅读(572) 评论(0) 推荐(0)
摘要:首先要知道 【定理】正整数n(n≥2)可以唯一分解成素数乘积,即:n =p[1]^r1 * p[2] ^r2 * p[3]^r3. *...* p[s]^rs 其次欧拉函数有两个性质,可以用来编程,单独求phi函数:① Ø(m) = m ( 1- 1/p[1]) ( 1- 1/p[2])…( 1- 1/p[s]) ② Ø(p^k) = p^k ... 阅读全文
posted @ 2010-09-11 09:48 菜到不得鸟 阅读(297) 评论(0) 推荐(0)
摘要:哥德巴赫猜想,不会出现"Goldbach's conjecture is wrong."。而且“choose the pair where the difference b - a is maximized.”这名话没用,不考虑就不用TLE了#include <stdio.h>#define MAXN 1000000bool flag[MAXN];int pn,... 阅读全文
posted @ 2010-09-11 09:38 菜到不得鸟 阅读(116) 评论(0) 推荐(0)
摘要:#include <stdio.h>#define MAXN 20011bool flag[MAXN];int prime[MAXN/2];void get_prime(int &k){ int i,j; for(i=2;i<MAXN;i++) { if(!flag[i]) prime[k++]=i; for(j=1;j<k && i*prime[j... 阅读全文
posted @ 2010-09-11 09:35 菜到不得鸟 阅读(132) 评论(0) 推荐(0)
摘要:费马(Fermat)测试:重复t次。如果每次得到n可能为素数,则n为素数的概率为1-(1/2t)。//31MS#include <stdio.h>#include <stdlib.h>#include <time.h>typedef long long LL;LL mod_exp(LL a, LL n, LL m) // a^n(mod m){ LL sum =... 阅读全文
posted @ 2010-09-11 09:34 菜到不得鸟 阅读(455) 评论(0) 推荐(0)
摘要:变态打表,0MS#include <stdio.h>const int arr[]={ 2,3,5,7,11,101,131,151,181,191,313,353,373,383,727,757,787,797,919,929,10301,10501,10601,11311,11411,12421,12721,12821,13331,13831,13931,14341,14741,1... 阅读全文
posted @ 2010-09-11 09:30 菜到不得鸟 阅读(523) 评论(0) 推荐(0)
摘要:和hdu1999差不多,求因子和。不过在1000内只用三个完数,打表可以0MS#include <stdio.h>#define MAXN 500001#define MAXQ 10001bool flag[MAXN];int sum[MAXN];void init(){ int i,j; for(i=1; i<=MAXN/2; i++) { for(j=i+i; j<MA... 阅读全文
posted @ 2010-09-11 09:29 菜到不得鸟 阅读(301) 评论(0) 推荐(0)
摘要:#include <stdio.h>#define MAXN 500001 //这题数据求到这里就可以了#define MAXQ 1001bool flag[MAXN];int sum[MAXN];void init(){ int i,j; for(i=1; i<=MAXN/2; i++) { for(j=i+i; j<MAXN; j+=i) { sum[j]+=i; } ... 阅读全文
posted @ 2010-09-11 09:28 菜到不得鸟 阅读(266) 评论(0) 推荐(0)