![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
我只是菜逼——数论
lliinnhhhan
这个作者很懒,什么都没留下…
展开
-
UVA 11426
给出代码段int G=0; for(int i=1; i for(int j=i+1; j { G+=gcd(i,j); }printf("%d\n",G);求G的值#include #include #include #include #i原创 2015-08-09 13:02:59 · 306 阅读 · 0 评论 -
hdu1111
求 X = a0 + a1B + a2B2 + ...+ anBn 中a0,a1,....an的值 其中X,Bi是复数。在这边要注意复数没有取模运算符。只能利用秦九韶公式 X=((((an)*b+an-1)*b+an-2)*b)*b...)*b+a0如果非复数 那我们就可以使用 进制取模的方法 来写。然并没有。只能是在每一层枚举规定范围内的值,然后找到符合要求的值#in原创 2015-08-06 13:41:01 · 555 阅读 · 0 评论 -
hdu1124
求N!后面0的个数。产生0来源是2和5 2的话 每隔一个就有一个5的话 比较难得。所以关键就在于n!里面5的个数#include #include #include #include #include #include #include using namespace std;const int maxn=1e9+1;typedef long long ll;原创 2015-08-06 15:45:05 · 376 阅读 · 0 评论 -
欧几里得
欧几里得gcd(a,b)=gcd(b,a%b)证明:1. d=gcd(a,b) => d|a, d|b 令r=a-kb 所以 d|r 也就是 r 和 b 存在d的公约数。 假设 d=gcd( b,a%b ) , d|b ,d|r ==> d|( a-kb ) d|a 所以最大公约数满足 2. d=gcd(a,b) , a=原创 2015-08-14 11:20:31 · 421 阅读 · 0 评论 -
hdu1014
seed(x+1) = [seed(x) + STEP] % MODSTEP=3 MOD=5 出现的循环串是 0, 3, 1, 4, 2.假设gcd(step,mod)=g ,令step=k*g,mod=m*g; 那么x=f*k*g-(f*k*g)/(m*g)*(m*g)=g*( f*k % m)*m ) {0序列是 {0,step ,2step,3step,4step,..原创 2015-08-04 17:02:05 · 436 阅读 · 0 评论 -
hdu2601
求出n=i*j+i+j的对数是的(0#include #include #include #include #include #include using namespace std;typedef long long ll;const int maxn=1e6;ll prime[maxn],len=0;bool status[maxn];void pri(){原创 2015-08-04 09:08:49 · 303 阅读 · 0 评论 -
sgu 106
给出a,b,c,x1,x2,y1,y2然后你要做的就是找出在矩形框内的整数点有多少个。初始解(x*(-c)/g,y*(-c)/g)然后对于x轴方向上的增量是 b/g我写成几何了 我去 。。。好好的数论题。先用扩展欧几里德求出初始解,获取到在离矩形框最近的点的x坐标。 然后计算直线和x=x1,x2,y=y1和y2上的点。然后取中间两个。判断两个点是否都在矩形框上。如果存在原创 2015-08-16 01:30:19 · 342 阅读 · 0 评论 -
Harmonic Number (II)
给出一段求调和级数的值。数据量是int 直接循环爆炸。可能就是找规律了。以往都是靠答案找规律。都很少在计算的过程里面找规律。也算是学习了。针对27这个案例i:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16....j:27 13 9 6 5 4 3 3 3 2 2 2 2 1 1 1原创 2015-07-22 14:17:49 · 360 阅读 · 0 评论 -
Goldbach`s Conjecture
给出哥德巴赫猜想:任意个偶数都可以表示成两个素数相加。数据范围是10^7开数组存素数表(傻逼的我1e6和664600大小分不清楚。。。。。然后对于判断是不是素数用bool就好了 不需要int型#include #include #include #include #include #include using namespace std;const int maxn=原创 2015-07-21 20:50:40 · 273 阅读 · 0 评论 -
同余式和中国剩余定理
x≡b1(mod a1) 1x≡b2(mod a2) 2x≡b3(mod a3) 4x≡b4(mod a4) 5x=k1*a1+b1≡b2(mod a2)k1*a1≡b2-b1(mod a2)裴蜀定理:对于方程 a*x+b*y=n;有整数解的充分必要条件是(n % gcd(a,b)== 0), 即n能够被a和b的最大公约数整除,其实原创 2015-08-17 10:25:41 · 720 阅读 · 0 评论 -
Sigma Function
题目意思:给出sigma函数的意义:sigmafunction(x)=x的因子之和x=p1^(e1)*p2^e2*...*pk^eksigmafunction(x)=(p1^(e1+1)-1)/(p1-1)*(p2^(e2+1)-1)/(p2-1)*...*(pk^(ek+1)-1)/(pk-1).求1~n之间的偶数值的个数。对于指数为0的项,(px-1)/(px-1)=1原创 2015-07-20 17:37:59 · 835 阅读 · 0 评论 -
Leading and Trailing
computer n^k leading three digits.n^k=a.lg(a)=k*lg(a).k*lg(a)=integer+decimal10^lg(a)=a=10^(k*lg(a))=10^(integer+decimal)=10^integer*10^decimal10^integer*10 算出的整十的倍数10^decimal才是计算真正结果的数字原创 2015-07-21 14:23:30 · 298 阅读 · 0 评论 -
Aladdin and the Flying Carpet
题目意思:给你一个整数a和整数b 然后你需要求出存在多少个c*d=a (c!=d) 的组合数量 输出个数就好了。如果直接循环遍历的话会超时。然后就是利用唯一分解定理。筛素数表之前想说找出大于b的最小a因子 感觉除了搜索的话,在分解的时候实现麻烦。然后就是 算出总的因子数/2,然后减去小于b的。#include #include #include #inclu原创 2015-07-20 15:19:27 · 412 阅读 · 0 评论 -
poj 1845
题目:求出A^B的因子和modp的值思路:利用sigma函数计算即可。sum=(p1^(k1*B+1)-1)/(p1-1)*... 然后就是将/(p1-1)转化成逆元去计算 就可以避免/运算。 但是这边有一个问题是 如果p|p1-1 那么逆元无解。wa情况。 也就只能另外计算了。p1=k*p+1 因为对于乘法同余,所以值为(k1*B+1)#incl原创 2015-08-27 00:12:42 · 329 阅读 · 0 评论 -
hdu 2588
题目给你 一个n和m 然后你要去求gcd(x,n)>=m的个数保证1对于gcd(x,n)>=m可以看做是 gcd(x,n)=m,gcd(x,n)=m+1.....gcd(x,n)=n; m必为n的倍数也就是 gcd(x/m,n/m)=1 也就是n/m内和n/m互质的数的个数。只要计算范围内的因子值的欧拉函数即可#include #include #include #i原创 2015-08-12 10:09:38 · 449 阅读 · 0 评论 -
hdu 3501
给出一个n求出与n公约数大于1的数的和。对于一个a与n互质, 那么n-a与a也互质。不存在a与n互质,n-a=a的情况。也就是说a 和n-a总是成对存在 那么phi[n]是偶数。那么和n互质数的和就是 n*phi[n]/2#include #include #include #include #include #include using namespace std;t原创 2015-08-11 21:03:32 · 357 阅读 · 0 评论 -
LightOJ 1197
给出一个区间 让你求区间内数的素数数量。#include #include #include #include #include #include using namespace std;const int maxn=50000;int prime[maxn],primelen;bool vis[maxn*2+5];void makeprime(){ prime原创 2015-08-10 15:37:13 · 640 阅读 · 2 评论 -
LightOj Mysterious Bacteria
给出x=b^p要让p尽量大。给出的x范围为负。质因数分解,然后计算幂指数间的最大公约数。如果是负数结果不能为偶数#include #include #include #include #include using namespace std;const int maxn=1e6+5;int len=0;long long prime[maxn];bool status[m原创 2015-08-07 14:11:11 · 305 阅读 · 0 评论