数论
文章平均质量分 68
acraz
这个作者很懒,什么都没留下…
展开
-
HDU 4596 Yet another end of the world(一阶不定方程是否可解,gcd)
题目让求是否有一组解(n,m)满足方程 n*x1+k1=m*x2+k2,,y1移项后变成:n*x1- m*x2=k2-k1,,y2-z1也就是:n*x1- m*x2=c,,y2-z1我们知道对于一阶不定方程a*n+b*m=gcd(a,b)肯定存在一组整数解。那么我们就可以看一下gcd(x1,x2)或者gcd(x1,x2)的整数倍是否在区间[y2-z1,z2-y1]中就可以找到是否可原创 2015-08-28 21:35:34 · 413 阅读 · 0 评论 -
HDU 4596 (Yet another end of the world)(二进制进位次数和)
题目让求从a加到b的二进制进位次数之和。题目给的是从a到b每次进行两个数的加法,然后求和。自己YY一下就知道可以从a到b一起做加法,求进位次数和。具体做法是我们先统计出来从a到b二进制的各位上有多少个1,假如二进制某位有x个1,那么该位进位次数即为x/2,然后给下一位进位x/2。然后把二进制位数扫一遍就行了。现在的麻烦是怎么统计a到b的二进制的各位上有几个1。通过找规律我们知道:对于二原创 2015-08-28 21:23:03 · 496 阅读 · 0 评论 -
辗转相除法和扩展欧几里得算法
辗转相除法(欧几里得算法)是用来求两个数的最大公约数c=gcd(a,b)假设c是a和b(a>b)的最大公约数,那么a=mb+d,又因为a%c==0,且b%c==0,所以d%c==0,令d=k*c那么a=mb+kc。。所以gcd(a,b)=gcd(b,kc),同理把b当成新的a,kc当成新的b,那么gcd(b,kc)=gcd(kc,b%kc)=...=gcd(c,0)扩展欧几里得原创 2015-08-15 22:37:43 · 1211 阅读 · 0 评论 -
HDU 5391 Zball in Tina Town(不知道的定理)
根据威尔逊定理有:当且仅当n为素数时,n可整除(n-1)!+1,也就是说(n-1)!+1=n*k(k是正整数),那么((n-1)!+1)%n=(n*k)%n=0,所以(n-1)!%n= -1=n-1本题就是要求(n-1)!%n先判断n是否为素数,若是素数直接输出n-1,若不是素数,则答案为0,特例是n=4的时候ans=2#pragma warning(disable原创 2015-08-17 23:44:32 · 471 阅读 · 0 评论 -
POJ 2429 GCD & LCM Inverse(大数分解)
用大数分解的模板把lcm/gcd分解了,然后就会得到十几个质因子,然后我们dfs一次找到和最小的a和b就成了。#pragma warning(disable:4996)#include#include#include#include#include#includeusing namespace std;//**********************************原创 2015-10-14 16:48:15 · 464 阅读 · 0 评论 -
POJ 3292 Semi-prime H-numbers(筛法变形)
我只能说这个水筛法写了我两个小时。。没有爱了。#pragma warning(disable:4996)#include #include #include #include using namespace std;const long long N = 1000001;long long H[300000];int tol;bool prime[300000];bool原创 2015-10-14 20:41:06 · 329 阅读 · 0 评论 -
大素数判断和素因子分解模板(miller-rabin,Pollard_rho算法)
转自kuangbin的模板。#include#include#include#include#include#includeusing namespace std;//****************************************************************// Miller_Rabin 算法进行素数测试//速度快,而且可以判断 <2转载 2015-10-14 16:21:07 · 451 阅读 · 0 评论