数论
Icoding_F2014
相信代码可以变化世界
展开
-
hdu1042 大阶乘
今天,我来学习一下高精度运算来,高精度运算在数学专题是经常要用上的。求N! 因为这里的N<100000,显然要高精度啦。如果N<20的话,倒是可以用long long 来水一发的。 这里的高精度算法使用的是模拟我们手写竖式那样子算来的。 设用数组a[n]用来保存第I个I!(a[0]存个位数字,a[1]存十位,a[2]存百位···,这样做的好处就是便于进位处理),那么我们在计算(I+1)!的时候原创 2015-06-11 15:39:57 · 473 阅读 · 0 评论 -
hdu1715大菲波拉契数
高精度加法对于菲波拉契数,f[i]=f[i-1]+f[i-2];(i>2) 这里的n<1000,还是要使用高精度加法的。 高精度加法和乘法,他们还是有很多相通的地方的。#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 1003int a[N][N];int main(){ memset(a,0,原创 2015-06-11 17:30:32 · 775 阅读 · 0 评论 -
hdu 1018阶乘位数
求N!的位数 因为前几天做了关于大数运算的学习,我也天真的以为这个题目是大数计算,后来才发现N<10^7,大数也没有办法了。 然而,这个题目只是求有多少位 N!=1·2·3·4·5·5·6·7···(n-1)·n 两边求对10的对数 log10(N!)=log(1·2·3·4·5·5·6·7···(n-1)·n) =log(1)+log(2)+log(3)+··原创 2015-06-12 11:55:03 · 619 阅读 · 0 评论 -
hdu2067和hdu1023 卡特兰数解法与大数处理
上次用DP将这首题给水过去了。因为这里N<=35. 现在我们来研究一下当N<100时的卡特数。通过资料我们可以发现, n=100时,卡特兰数长度也就才58; 所以对于普通的题目,我们开a[110][110],足够的了。我们先打表后计算。不过要注意的是,最后的结果是卡特兰数的2倍。 这道题既然是高精度,那肯定就要使用高精度的算法啦。#include <stdio.h>#include <原创 2015-06-12 01:31:36 · 660 阅读 · 0 评论 -
折现法——卡特兰数证明
1.饭后,姐姐洗碗,妹妹把姐姐洗过的碗一个一个地放进碗橱摞成一摞。一共有n个不同的碗,洗前也是摞成一摞的,也许因为小妹贪玩而使碗拿进碗橱不及时,姐姐则把洗过的碗摞在旁边,问:小妹摞起的碗有多少种可能的方式?2.给定n个数,有多少种出栈序列?3.一个有n个1和n个-1组成的字串,且前k个数的和均不小于0,那这种字串的总数为多少? 这三个问题具有相同的结构,三个问题是可转载 2015-06-12 20:47:26 · 1052 阅读 · 0 评论 -
欧几里德算法计算GCD
引言: 在数论方面,有很多地方需要计算最大公约数(Greatest Common Dividor),GCD的计算法主要直接分解因式后提取最大公因式的因式分解法,还有普通使用的欧几里德算法。 预备知识: 整数除法:中学阶段,我们知道对于两个整数a,b,如果a=b*q+r,其中q,r是整数,并且的0<=r<q, 那么q又叫做商(q>=1),r叫做余数。 如果r=0,我们称a能被b整除,原创 2015-07-12 15:08:31 · 1311 阅读 · 0 评论 -
整数整除性质的一些通用证明方法
本文介绍如何证明被某些数整除的数的性质设有数x,写成如下形式:am · · · a4a3a2a1a0. a0 在个位, a1 在十位, a2 在 百位 等等。 还可以把x写成:*x = a0 + a1 · 10 + a2 · 100 + a3 · 1000 + a4 · 10000 + · · · + am · 10m = a0 + a1 · 10 + a2 · 10^2 + a3 ·原创 2015-07-13 23:19:41 · 5112 阅读 · 0 评论