2012年2月22日
摘要: HNU_11720 这个题目本来是一个数论课本的课后习题,最后可以得到结论sp=(p*p-1)/24-(p-1)/4(我暂时还没看懂怎么推导的……),这样就可以很容易的算出sp的值,于是就可以得到sp*rp=k*p+1,变形得sp*rp-p*k=1,又因为p是素数且可以证明gcd(sp,p)==1,所以这个方程必然有解,于是用拓展欧几里得求出rp即可。#include<stdio.h>#include<string.h>long long int P;void gcd(long long int a, long long int b, long long int &am 阅读全文
posted @ 2012-02-22 20:01 Staginner 阅读(197) 评论(0) 推荐(0) 编辑
摘要: HNU_11722 由于勾股数a,b,c可以表示成a=m^2-n^2,b=2*m*n,c=m^2+n^2,因此可以枚举n找到所有可能的互素的勾股数,然后去掉其中重复的解即可。 这个题目还可以用一个剪枝,就是如果c%4!=1的话一定无解。#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>#define MAXD 60000int C, a[MAXD], b[MAXD], r[MAXD];int gcd(int x, int y){ return y == 0 ? 阅读全文
posted @ 2012-02-22 12:58 Staginner 阅读(298) 评论(0) 推荐(0) 编辑
摘要: POJ_1061 根据题意可以得到(x+k*m)%L==(y+k*n)%L,所以有x+k*m==y+k*n+t*L,移项得L*t-(n-m)*k==x-y,这时未知数有两个,t和k,而我们的目的得到k的一个最小整数解。 首先我们可以先用拓展欧几里得得到L*t-(n-m)*k=d的一组解,其中d为abs(n-m)和L的最大公约数。接下来,不妨设求得的一个解为k1,如果x-y不能整除d,那么等式L*t-(n-m)*k==x-y是没有整数解的,如果x-y能够整除d,那么L*t-(n-m)*k==x-y的一组整数解中的k就是k1*(x-y)/d。而k的解是以L/d为单位变化的,这样利用k的一个解以及k 阅读全文
posted @ 2012-02-22 09:12 Staginner 阅读(239) 评论(0) 推荐(0) 编辑