
数学
文章平均质量分 55
Terry__J
这个作者很懒,什么都没留下…
展开
-
usaco Friday the Thirteenth
<br /> <br />黑色星期五<br />译 by 孖哥<br />13号又是星期五是一个不寻常的日子吗?<br />13号在星期五比在其他日少吗?为了回答这个问题,写一个程序来计算在n年里13<br />日落在星期一,星期二......星期日的次数.这个测试从1900年1月1日到<br />1900+n-1年12月31日.n是一个非负数且不大于400.<br />这里有一些你要知道的:1900年1月1日是星期一.4,6,11和9月有30天.其他月份除了2月有31天.闰年2月有29天,平年2月有28天原创 2011-05-10 01:56:00 · 821 阅读 · 0 评论 -
数论 ural 1356. Something Easier
思路:根据哥德巴赫猜想, 任一大于2的偶数都可写成两个质数之和。 任一大于7的奇数都可写成三个素数之和。详细内容可参照维基百科http://zh.wikipedia.org/wiki/%E5%93%A5%E5%BE%B7%E5%B7%B4%E8%B5%AB%E7%8C%9C%E6%83%B3。#include #include #include #include #incl原创 2012-03-22 12:12:33 · 856 阅读 · 0 评论 -
hdoj Integer’s Power
来源:2009 Shanghai Invitation Contest Host by DHU思路:sum[a, b] = sum[2, b] - sum[2,a-1].枚举指数i,计算出在区间内可以表示成p^i的个数。值得注意的是若在区间[2, 64]内,i = 2时,a[2] = 7(2,3,4,5,6,7,8),其中4,8不应包含在内,因为4^2= 2^4,8^2=2^6,所以在原创 2012-03-31 12:08:28 · 941 阅读 · 0 评论 -
poj 2480
设函数g(n) = gcd(i,n) (11时 n=p1^a1*p2^a2*...*ps^as,那么f(n)是积性函数的充要条件是f(1)=1,及f(n) = f(p1^a1)*f(p2^a2)*...f(pr^ar)。所以只要求f(pi^ai)就好,如果d是n的一个约数,那么1<=i<=n中gcd(i,n) = d的个数是phi(n/d),即n/d的欧拉函数f(pi^ai) = Φ(p原创 2012-03-28 17:56:49 · 2367 阅读 · 2 评论 -
hdoj 1695 GCD
思路:由题意可知求gcd(i, j) = k 满足i属于区间[a,b],j属于区间[c, d]. 进而转化成求gcd(i/k, j/k) = 1 满足i属于区间[1, b/k],j属于区间[1, d/k].即求两区间内互素数的对数有多少。欧拉函数可求出所有小于等于n并且与n互素的数的个数。假设b#include #include #include #include #include原创 2012-03-27 20:51:09 · 1062 阅读 · 0 评论 -
阶乘最后非零位 模板
#include using namespace std;#define MAXN 10000char c[MAXN];int lastdigit(char* buf){ const int mod[20]={1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2}; int len=strlen(buf),a[MAXN],i,c,ret=1; if转载 2012-03-27 12:50:00 · 582 阅读 · 0 评论 -
hdoj 1060 Leftmost Digit
思路:n^n = a*10^p.#include #include #include #include #include using namespace std;int main(){ int t, n; scanf("%d", &t); while (t--) { double tmp, a; scanf("%d", &原创 2012-03-27 12:10:40 · 545 阅读 · 0 评论 -
哪些素数可以表示成两平方数之和? hdoj 3542 费马降阶
摘自数论概论的内容:素数的两平方数之和定理:设p是素数,则p是两平方数之和的充要条件是p= 1(mod 4) (或 p = 2).两平方数之和定理实际上由两个陈述组成:陈述1:如果p是两平方数之和,则p = 1(mod 4).证明:设p = a^2 + b^2,p是奇数,所以a,b为一奇一偶,设a为奇数, b为偶数.比如 a= 2*n+1 b = 2*m.p = a^2 + b^2原创 2012-03-26 18:10:50 · 5966 阅读 · 0 评论 -
扩展欧几里德算法
欧几里德的推广形式, 使其能计算出满足下面条件的整系数x,y:d = gcd(a, b) = ax + byvoid extend_Eulid(int a, int b){ if (b == 0) { x = 1; y = 0; d = a; } else { extend_Eulid(b, a%b)原创 2012-03-08 15:58:10 · 582 阅读 · 0 评论 -
中国剩余定理 hdoj 1370 Biorhythms
中国剩余定理,即孙子定理,对于三个数问题的形式为:已知M1,M2,M3是两两互素的正整数,求最小ans,使它被M1,M2, M3所除得到的余数分别是C1,C2, C3。孙子定理的算法思想是:找出被Mi除余1而被另外两个数整除的数Wi。所求数之一为:ans = sum(Wi*Ci)(i = 1,2,3).若要求满足条件的最小解,mod(lcm(M1,M2 ,M3 ))即可。#include原创 2012-03-24 11:52:27 · 924 阅读 · 0 评论 -
hdoj 1061 Rightmost Digit
思路:对于每个数字,得到i次方之后(i=1,2,3...),你会发现个位数的值是循环的。不管多大的数,n次方之后,个位数字只与个位数有关。#include #include #include #include using namespace std;int rdigit[11][10] = {{0,0},{1,1},{1,2,4,8,6},{1,3,9,7,1},{1,4,6},原创 2012-03-23 20:29:48 · 707 阅读 · 0 评论 -
hdoj 1452 Happy 2004 所有因子求和
思路: 任意一个大于2的数都可以写成素因子乘积的形式,对于2004 = 2*2*3*167;因子和 s是积性函数,即 :gcd(a,b)=1==> s(a*b)= s(a)*s(b) 2004^X=2^2X * 3^X *167^X, s(2004^X)= s(2^(2X))* s(3^X) * s(167^X)如果 p是素数 ==> s(p^X)=1+p+p^2++p^X = (p原创 2012-03-24 17:54:19 · 925 阅读 · 0 评论 -
hdoj 3543 Roba number
题意:求在3*10^7和4*10^7之间的所有素数。思路:打表。怎么打表呢,首先判断一个比较小的数是否为素数,是的话,它的倍数都不是素数。这个较小的数要枚举到多大呢,题目中给定最大数是40000000,那么它的最大素因子是sqrt(40000000)。也就是说,在3*10^7至4*10^7范围内,最大素数不会超过sqrt(40000000)。#include #include usin原创 2012-03-23 17:37:10 · 736 阅读 · 0 评论 -
组合数学 C(n,k)
<br />求C(n,k)的方法很多,这里只介绍打表的方法.<br />递推式:C(n,k) = C(n-1,k-1) + C(n-1,k)<br />代码:<br />#include <iostream>using namespace std;const int MAX = 100;int c[MAX][MAX];int main() { int i,j; for(i=1; i<=1000; ++i) { c[i][0] = 1; c[i][1] = i; }原创 2011-05-09 00:11:00 · 8084 阅读 · 0 评论 -
hdoj Buy the Ticket
算法分析:首先假设人无区别令f(m,n)表示有m个人手持¥50的钞票,n个人手持¥100的钞票时共有的方案总数。则可以分以下情况讨论这个问题:(1)当n=0时 n=0意味着排队购票的所有人手中拿的都是 ¥50的钞票,那么这m个人排队方案总数为1。(2)当m(3)其他情况: 考虑(m+n)个人排队购票的情景,第(m+n)人站在第(m+n-1)个人的后面,则第(m+n原创 2012-04-10 13:47:30 · 930 阅读 · 0 评论