随笔分类 -  数学——数论

摘要:首先我先给出一个他们之间的关系最大公约数L和最小公倍数G的关系:1、L%G == 0;2、设A, B的最大公约数为G, 最小公倍数为L,则:L/G = (A/G)*(B/G)3、gcd(A/G, B/G) = 1;本题:题意:给你三个数x,y,z的最大公约数gcd,最小公倍数lcm . 然后求满足的x,y,z有多少种可能。(1,3,2) 和 (1,2,3)被视为不同思路:首先lcm%gcd == 0是必须的,否则无解。然后将tmp = lcm/gcd 进行因式分解。假设其中有一个质因子p1的幂为e1,那么着三个数中至少有一个含有p1,至少有一个不含p1 。如果都含有p1的话他就被分到最大公约数 阅读全文
posted @ 2013-06-07 19:51 E_star 阅读(425) 评论(2) 推荐(0) 编辑
摘要:逆元:http://www.cnblogs.com/E-star/archive/2013/04/26/3045412.html题意:给定三个数a,b,n, a,b,n(1 ≤ a < b ≤ 9, 1 ≤ n ≤ 106) 求由a,b组成的长度为n的数有多少种。思路:我们只要枚举a的个数i,然后n-i就是b的个数,i个a与n-i个b的排列有多少种? f[n]/(f[i]*f[n - i]) f[i]表示i的阶乘。这里整体思路很明显出来了,可是这里仍然有一个关键就是如何求f[n]/(f[i]*f[n - i])%mod? 所以这里就要求逆元了。运用求逆元的两种方法都可以,因为这里的mod 阅读全文
posted @ 2013-04-26 18:17 E_star 阅读(434) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/contest/248/problem/B题意:求一个长度为n的并且能够同时被2,3,5,7整除的最小数,1<=n <= 10^5思路:比赛的时候弱爆了,竟然没有想到.....惭愧啊...首先这个数一定是2*3*5*7 = 210的倍数,而最小的长度为n的数是10000...(n - 1)个0.我们只要加上这个数模210剩余的数与210的差值就得到了该数,这里关键是n的长度啊受不了了...所以我们用到公式(a*b)%c = a%c * b%c;只要不断地乘10然后取模即可得到余数,然后用210减去之后就是我们还要加上多少数才能使得该数被2 阅读全文
posted @ 2012-11-26 17:28 E_star 阅读(276) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/contest/236/problem/B题意:给定a,b,c三个数,d(i)表示i的因子的个数,求思路:任何一个数a都可以分解为素因子的乘积 a = p1^n1*p2^n2*p3^n3......然后他的因子的个数就为ans = (n1 + 1) * (n2 + 1)*(n3 + 1)....时间复杂度为O(n^3*x)这个x是多少真不知道怎么想,。还有一种方法是直接枚举1-100作为因子所能组成的数,每次组成该数就+1。最后直接的结果求和即可。View Code #include <iostream>#include <cstd 阅读全文
posted @ 2012-10-22 21:28 E_star 阅读(326) 评论(0) 推荐(1) 编辑
摘要:hdu 1028 Ignatius and the Princess III 母函数模板题http://acm.hdu.edu.cn/showproblem.php?pid=1028题意:整数的拆分。母函数学习http://www.wutianqi.com/?p=596View Code #include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include < 阅读全文
posted @ 2012-10-06 19:51 E_star 阅读(256) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=3863题意:一栋大楼有无数层,每个电梯有两个开关,选择向上ui层,向下di层,问一共按n次开关最低能到达第几层,起点为第0层,如果坐在的层数小于di不能往下走。扩展欧几里德:通过这个题对扩展欧几里得又有了新的认识:首先设向上按x次,向下按y次,能到达的最低层数为z.则得到(1) ui*x - di*y = z; (2) x + y = n;联合(1),(2)得:-z + (ui + di)*x = n*di;转化一下得到 a*x + b*y = p 形式的式子,于是就可以利用扩展欧几里得求x的最小正整数值即可。 但是必须注意的是:在利用扩展 阅读全文
posted @ 2012-05-31 14:53 E_star 阅读(359) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=1845这道题真是纠结死人了。首先要明白整数分解素因子的唯一性贴个连接http://ganlu.name/blog/archives/%E8%AE%B0%E4%B8%A4%E4%B8%AA%E8%AF%81%E6%98%8E%E8%B4%B9%E9%A9%AC%E5%AE%9A%E7%90%86%E4%B8%8E%E6%95%B4%E6%95%B0%E5%88%86%E8%A7%A3%E7%B4%A0%E5%9B%A0%E5%AD%90%E7%9A%84%E5%94%AF%E4%B8%80%E6%80%A7其次还要明白A可以唯一分解成p1^a 阅读全文
posted @ 2012-05-05 21:25 E_star 阅读(191) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=3292H-number是4*n + 1 (n >= 1) 而H-prime h 则是只包含因子 1和h的H-number 这里特别注意h是也要是H-number 所以9在这里就是素数了。才开始自己以为从4*n + 1这批数中选出素数然后枚举所有的乘积,然后记录个数。样例肯定不会过了。思路一样可就是素数筛选时,要选H-primeView Code #include <iostream>#include <cstdio>#include <cstring>#include <algorithm&g 阅读全文
posted @ 2012-05-04 23:41 E_star 阅读(218) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=2635因为给定的k是两个素数的乘机,所以该数所包含的因子是{1,K,p,q}假设k = p*q p,q为素数,所以只要从小到大枚举小于L的素数,只要能够整出,就说明p已经求得,否则则不存在。这里关键是k< 10^100次方,普通数据类型无法直接输入,所以要模你除法,这里将k转换成1000进制的数然后模拟除法。如果是10进制的数模拟除法是时间复杂度会是O(10^8)会超时。View Code #include <stdio.h>#include <string.h>#define maxn 1000007int 阅读全文
posted @ 2012-05-04 11:31 E_star 阅读(277) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示