数学理论
煦--晨
菜鸟起飞
展开
-
(hdu(1998)奇数阶魔方
右上方:很容易知道正对角线从左到右数依次增大,我们要找到规律使数依次增大并将其位置存在一个数组之中; 要分别判段:第一行,最后一行,第一列,最后一列,的情况;第一行的最后一个元素更要特殊处理;其余的就是(i-1,j+1)的情况了,只要(i-1,j+1)的位置为零就可以直接赋值,否则直接对(i,j+1)赋值了;; 首先要从一开始其坐标为(1,n/2+1);然后就遵守上述规原创 2013-08-19 13:44:26 · 662 阅读 · 0 评论 -
2^n
和大数阶乘一样,都要用数组存储,模拟手算过程。。#include#include"string.h"int main(){ int m,n,i,j,k,h,a[40000]; scanf("%d",&n); while(n--) { scanf("%d",&m); memset(a,0,sizeof(a)); a[0]=1;原创 2013-08-18 16:19:37 · 601 阅读 · 0 评论 -
(hdu(1570)AC
#includeint main(){ int i,n,m,t; char c; __int64 a[11]={1,1}; for(i=2;i a[i]=a[i-1]*i; scanf("%d",&t); while(t--) { getchar(); scanf("%c %d %d",&c,&n,&m); if(c=='A')原创 2013-08-18 15:03:05 · 524 阅读 · 0 评论 -
hdu(2674)
#include"stdio.h"#include"string.h"int main(){ __int64 m,n,k,h; int i; while(scanf("%I64d",&m)!=EOF) { if(m>=2009)//其实m>40,就为零了。。因为2009=41*9*9; {原创 2013-08-18 15:07:08 · 529 阅读 · 0 评论 -
hdu(4497) GCD and LCM
题目大意: 求gcd(x,y,z)=G且lcm(x,y,z)=L的方法数。题目分析: 起初这道题一点想法都没有。。看了题解才有些想法。 首先如果L不能被G整除的话,这样的组合一定不存在。 当这样的组合存在的时候,所求与 求gcd(x,y,z)=1且lcm(x,y,z)=L/G的方法数是等价的。 那么:令temp=L/G。 对temp进行素数分解:temp=原创 2013-08-29 17:59:12 · 633 阅读 · 0 评论 -
poj(1845)
大致题意:求A^B的所有约数(即因子)之和,并对其取模 9901再输出。 解题思路:要求有较强 数学思维 的题应用定理主要有三个:要求有较强 数学思维 的题应用定理主要有三个:(1) 整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式。 A=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn原创 2013-08-29 18:02:25 · 472 阅读 · 0 评论 -
hdu(4349) Xiao Ming's Hope
求C(n,0),C(n,1),C(n,2)...C(n,n).当中有多少个奇数。就是把n转化为二进制数,看有多少个一,k;最后2^k即可;若要求偶数的个数;则为n+1-sum;#include"stdio.h"int fun(int n){ int k=0; while(n) { k+=n%2; n=n/2; } return k;}in原创 2013-09-02 18:37:29 · 465 阅读 · 0 评论 -
hdu(1719)Friend
由题意知;如果x是friend则有x=a+b+a*b;则x=(a+1)*(b+1)-1;因为1,2是friend则只要x+1=2^m*3^n 满足这种形式即可; #include"stdio.h"#include"string.h"int main(){ int n; while(scanf("%d",&n)!=EOF) { if(n==0)原创 2013-09-02 19:34:12 · 491 阅读 · 0 评论 -
hdu(4710) Balls Rearrangement
方法不太好想,参考别人的;不难发现a和b的最小公倍数是个周期。举个例子可以看看:a=3,b=5i=0 i%a i%b abs(i%a-i%b) i=0i%a i%b abs(i%a-i%b) 0 0 0 0 1 1 1 0 2 2 2 0 3 0 3 3原创 2013-09-09 17:37:37 · 604 阅读 · 0 评论 -
hdu(4715) Difference Between Primes
题意:一个数看是否能用两个素数之差来表示;把素数存在一个数组里;查遍所有素数; #include"stdio.h"#include"string.h"#include"math.h"#define N 1050000int map[N];int prime[N];int main(){ memset(prime,0,sizeof(prime)); i原创 2013-09-09 18:22:00 · 584 阅读 · 0 评论 -
hdu(4720) Naive and Silly Muggles
题意:前三个点坐标,要找到一个最小的圆能覆盖这三个点;若第四个点在这个圆外则输出Safe,否则输出 Danger;前三个点确定一个三角形,若这个三角形是直角三角形或钝角三角形,则圆心在最长边的中点,半径是其一半;如果为锐角三角形, 则利用公式; x0=((y2-y1)*(y3*y3-y1*y1+x3*x3-x1*x1)-(y3-y1)原创 2013-09-20 16:34:58 · 788 阅读 · 0 评论 -
hdu(1025)(最大单调递增序列)
题意很明确,就是求最大递增序列元素的个数,由于数很大一般的方法会超时;这时用二分查找或线段树的方法都可以,此时主要针对二分查找说明;此方法要用到两个数组,数组a的下标i是记录第几个元素(i=1,2,。。。n),a的值是此位置的数值。把输入的数都存进了数组a中。。二分查找,查的是数组b,找出数组b中第一个大于a[i]的值的位置k,此时改变数组b在k位置的值,b[k]=a[i];这样的原创 2013-10-31 14:47:22 · 700 阅读 · 0 评论 -
Alice and Bob
http://codeforces.com/problemset/problem/346/A #include"stdio.h"int fun(int n,int m){ int r=1,t; if(n { t=n; n=m; m=t; } while(r>0) { r=n%m; n=m; m=r; } re原创 2013-10-27 20:28:38 · 658 阅读 · 0 评论 -
大数阶乘(模拟手算过程)
#includeint a[1000000];int main(){int i,j,k,d,z,n; for(i=1;i<1000000;i++) a[i]=0; a[0]=1;d=1; scanf("%d",&n); for(i=1;i<=n;i++) { for(j=0;j<d;j++) a[j]=a[j]*i;原创 2013-08-18 16:13:05 · 737 阅读 · 0 评论 -
hdu(3835)
注意:1、0*0+x*x=n, sum+=4;2、x*x+x*x=n, sum+=4;3. x*x+y*y=n; sum+=8; #include"stdio.h"#include"math.h"int main(){ int n,m,i,j,sum; while(scanf("%d",&n)!=EOF) { sum=0;原创 2013-08-18 19:26:45 · 582 阅读 · 0 评论 -
hdu(1046)Bother
//做这个题的方法就是;把每一个点都一次消为零,//到最后一个点的时候看他是否为零。。#include"stdio.h"#include"string.h"int main(){ int n,i; int a[1000]; while(scanf("%d",&n),n!=-1) { a[1]=n; for(i=2;i scanf("%d",&原创 2013-08-19 09:29:48 · 608 阅读 · 0 评论 -
(hdu)1027 全排序
调用STL库函数next_permutation(startAddress,endAddress) #include"stdio.h"#include"algorithm"using namespace std;int main(){ int n,m,i; int a[20000]; while(scanf("%d%d",&n,&m)!=原创 2013-08-20 18:38:53 · 474 阅读 · 0 评论 -
hdu(1212)大数取模
借鉴别人的思路;用递推的思想,就可以总结出下面的公式;举例:12345 9余数等于(12340%9+5%9)%9;而12340 9(12300%9+40%9)%9;依次...最后(10000%9+2000%9)%9;而10000%9=(1%9*10000)%92000%9=(2%9*1000)%9即(1*10+2)%9*1000%9;即可得到:f原创 2013-08-09 17:38:06 · 564 阅读 · 0 评论 -
hdu(1019)n个数的最小公倍数。。
#include"stdio.h"#include"math.h"int fun(int a,int b){ int r=1,c; if(a { c=a; a=b; b=c; } while(r>0) { r=a%b; a=b; b=r; } return a;}int main(){ int m,n,原创 2013-08-08 12:28:32 · 573 阅读 · 0 评论 -
hdu(1018)Big Number(阶乘位数的计算)
这题要求n的阶乘的位数,如果n较大时,n的阶乘必将是一个很大的数,题中说1<=n<10000000,当n=10000000时可以说n的阶乘将是一个非常巨大的数字,对于处理大数的问题,我们一般用字符串,这题当n取最大值时,就是一千万个数字相乘的积,太大了,就算保存在字符串中都有一点困难,而且一千万个数字相乘是会涉及到大数的乘法,大数的乘法是比较耗时的,就算计算出结果一般也会超原创 2013-08-08 11:23:17 · 716 阅读 · 0 评论 -
hdu(1164)Eddy's research I
#include"stdio.h"#include"string.h"int map[70000];int main(){ int m,i,j; while(scanf("%d",&m)!=EOF) { j=1; for(i=2;i { while(m%i)原创 2013-08-10 19:29:59 · 511 阅读 · 0 评论 -
hdu(3940)The Angry Birds
题意: 这题是一道简单的物理题,实际上只要一个抛物线的公式就可以了,一共有3种鸟,各有不同的特性:红鸟的轨迹是一条抛物线;黄鸟的前期轨迹是一条抛物线,在t时,黄鸟的Vx,Vy翻倍;蓝鸟的前期轨迹是一条抛物线,在t时,可以分裂成3只小蓝鸟,每只的轨迹都是抛物线。分析:说来说去,其实都是求抛物线的,因此只要有一个函数用来计算,那么做起来会方便的多。 #includ原创 2013-08-11 18:48:02 · 691 阅读 · 0 评论 -
hdu(4357)String change
当字符串长度为2时:直接模拟即可(最多26次)。当字符串长度大于2时:1. 定义字符串的奇偶性为该字符串所有字符之和的奇偶性。2. 因为每次变化操作字符串的字符和共增加了2,所以当字符串的奇偶性不同时答案一定为N O。3. 当字符串的奇偶性相同时可证明答案一定为YES;可以证明;对于任意3个位置的字符(x1 , x2 , x3 ),可进行如下变化:(x1 , x2原创 2013-08-11 10:04:34 · 549 阅读 · 0 评论 -
hdu(4602) Partition
用到了二分幂算法和公式;罗列一到五可得到规律; 1 2 3 4 51 12 2 13 3 2 14 12 5 2 15原创 2013-08-12 20:20:48 · 623 阅读 · 0 评论 -
hdu(3007)
#include"stdio.h"#include"math.h"int main(){ int n,i,j; double a[10000],b[10000],k,h,f1,f2; while(scanf("%d",&n),n) { h=0.0; for(i=0;i scanf("%原创 2013-08-13 21:51:39 · 641 阅读 · 0 评论 -
hdu(4493) Tutor
本来是很简单的题,但要考虑到四舍五入,就要把问题考虑全面了。小数点四舍五入,是要看小数点后第三位是否》5;另外输出的结果最后一位不能为零,所以要分别讨论小数点后两位是否都为零,还是哪一位为零。。 #include"stdio.h"#include"string.h"int main(){ int m,n,i,k; double sum,num; scanf(原创 2013-08-27 13:50:56 · 636 阅读 · 0 评论 -
(hdu 4586) Play the Dice
解题思路:只考虑第一次,获得的金币的平均值为sum/n.sum为所有色子的面的金币值相加。对于运气好,摇中了可以再来一次,该轮就能获得m/n*(sum/n)运气好,又再来一次,该轮能获得(m/n)^2*(sum/n)无穷无尽的摇下去,一共能获得sum/n*(1+p + p^2+`````+p^k + ````),其中p = m/n将式子化简,就能得到E = sum/(n-m)。原创 2013-08-18 17:03:51 · 578 阅读 · 0 评论 -
hdu 1787 GCD Again
在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。 φ函数的值 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)原创 2013-11-11 19:46:08 · 462 阅读 · 0 评论