摘要: 题意:求组合数C[n][k]的约数个数。(0<= k <= n <= 431)思路:一个数num的约数个数为cnt,将num质因数分解,得num = p1^a1 * p2^a2 * p3^a3 * ……*pn^an.则约数个数cnt = (a1 + 1) * (a2 + 1) * (a3 + 1) * …… *(an + 1).C[n][k] = n ! / ((n - k) ! * k !).cal(n, k) 函数求出 n! 时能分解出几个 k。(1) 先预求 1 到 431 的素数表。(2) 则C[n][k]中包含素数prime[i]的个数为ai = cal(n!, p 阅读全文
posted @ 2011-09-06 20:32 ω 提拉米兔 ℃ 阅读(495) 评论(0) 推荐(0)
摘要: 题目意思是给定m,n问你 m/n的二进制表示的最大循环节开始位置和长度。找了一些题解,发现没有满意的,discuss里面的分析已经很好了。。我们可以观察一下1/10这组数据,按照二进制转换法(乘二法),我们可以得到:1/10 2/10 4/10 8/10 16/10 32/10 ...然后都分子都尽可能减去10,得到:1/10 2/10 4/10 8/10 6/10 2/10 ...这时候,发现出现了重复,那么这个重复就是我们要求的最小循环。抽象出模型如下:对p/q首先p'=p/gcd(p,q)q'=q/gcd(p,q);然后我们就是求p'*2^i == p'* 阅读全文
posted @ 2011-09-06 19:12 ω 提拉米兔 ℃ 阅读(456) 评论(0) 推荐(0)
摘要: 先开始暴搞,然后悲剧地超时了……题目的大意是:求出正整数1~n内两两互质的数的对数。其中n <= 1,000,000欧拉函数还有这样的性质: 设a为N的质因数,若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N / a) * a;若(N % a == 0 && (N / a) % a != 0) 则有:E(N) = E(N / a) * (a - 1)。 预处理用筛选法求得1~n内的所有质数,就可以在比较快的时间内求得1~n内所有数字的欧拉函数。 在筛选法求质数的过程中,记录合数的最小质因数,这样在求欧拉函数的过程中之 阅读全文
posted @ 2011-09-06 09:48 ω 提拉米兔 ℃ 阅读(356) 评论(0) 推荐(0)
摘要: 又去抄依然大神的题解了……a274001001Accepted3400K110MSJava687B2011-09-05 20:58:10import java.io.*;import java.math.*;import java.util.*;import java.text.*; public class Main { public static void main(String[] args) { Scanner cin=new Scanner (new BufferedInputStream(System.in)); BigDecimal num; ... 阅读全文
posted @ 2011-09-05 21:03 ω 提拉米兔 ℃ 阅读(442) 评论(0) 推荐(0)
摘要: 给定m, k(1 <= m <= 1000000), K(1 <= K <= 100000000), 询问第k个与m互质的数。欧拉函数的应用。首先是求出m的欧拉函数值phi[m],可知区间[1, m - 1]中有phi[m]个数与m互质。同样,在区间[n*m + 1, (n + 1) * m]中必然也有phi[m]个数与m互质,并且这phi[m]个数与[1 - m - 1]的phi[m]个数是"一一对应"的。所以只要通过k / phi[m]找到第n个区间,然后再枚举区间中的数就可以找到第k个与m互质的数。先开始当m=1时,我输出的是k+1,wa了几次 阅读全文
posted @ 2011-09-05 20:24 ω 提拉米兔 ℃ 阅读(337) 评论(0) 推荐(0)
摘要: 题目太水,就不说了。。主要是想把代码贴出来以后还有用。。import java.io.*;import java.math.*;import java.util.*;import java.text.*;public class Main{ public static void main (String[] args) { Scanner cin=new Scanner (new BufferedInputStream(System.in)); BigInteger prime[]=new BigInteger[110]; Big... 阅读全文
posted @ 2011-09-05 19:18 ω 提拉米兔 ℃ 阅读(203) 评论(0) 推荐(0)
摘要: 被这道题虐了两天了……自己也试着敲了一下。。事实证明手上的模版不给力啊。。。先用手上的模版敲了一个miller rabin,结果9都给我判成素数,真是无言了,然后又用算导上面讲得方法自己敲了一个pollard rho,结果卡死了……只有少数几种情况会出答案,大部分情况都是卡死了。。悲剧一个。。后来去找解体报告,因为这个题本来就是模版题嘛。。大多数写的都不是很符合我的习惯,看不进去,好不容易找到两个我看得进去的吧,自己在hust上交了一下,居然RE了。。话说这种解题报告还交上来嘛。。。好不容易在百度知道上面找到了一份代码,我觉得写得挺不错的,也解决了一些我遇到的困惑。素数判断用miller法 分 阅读全文
posted @ 2011-09-02 17:39 ω 提拉米兔 ℃ 阅读(557) 评论(0) 推荐(0)
摘要: watashi大神推荐的题目就是给里呀~~~大意:求aa..a%m!的极限。欧拉定理的内容是:如果a和n互质,那么aφ(n)=1(mod n);对于任意a, n和较大的b,有ab=aφ(n)+b mod φ(n)(mod n)我们设aa..a=A则有A=aφ(n)+A mod φ(n)(mod n)这样就可以递归求解。因为φ(n)<n,所以这样递归一定有边界。接下来就是上欧拉函数模版,素数筛模版了。。另:要用longlong,不然会悲剧。。PS:还跟watashi大神学习了每组数据之间分空行,最后一组数据后面没有空行怎么打的问题~~2011-08-31 21:58:22Accepted2 阅读全文
posted @ 2011-08-31 22:07 ω 提拉米兔 ℃ 阅读(590) 评论(0) 推荐(0)
摘要: 各种敲错啊啊啊啊……重写了一遍才过的……这个是模版题,用模版来筛出(a,b)区间内的素数因为n很大,所以不能直接用筛法来求素数,会超时,网上说的办法是先筛出一些素数,然后用这些筛出来的素数来筛后面的素数我是筛掉了2^16的素数,当所给区间的右端点小于这个值时,就直接用筛出来素数来求容易错的地方写在注释里面好了……#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#define INF 1000000+10#define 阅读全文
posted @ 2011-08-31 19:35 ω 提拉米兔 ℃ 阅读(229) 评论(0) 推荐(0)
摘要: hdu 1398 Square Coins最基础的普通母函数有n种硬币,每种硬币都有不同的价值,若需要组合出总价值m,问有多少种组合方式。硬币个数没有限制。2011-08-29 20:19:35Accepted139815MS332K797 BG++TiramituView Code #include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define MAXN 300usi 阅读全文
posted @ 2011-08-31 11:52 ω 提拉米兔 ℃ 阅读(250) 评论(0) 推荐(1)