【数学】
__流影
读书、探知、成长、做有意义的事!
展开
-
杭电1021 Fibonacci Again
不解释,自己看吧!Fibonacci AgainTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 27175 Accepted Submission(s): 13122Problem DescriptionT原创 2013-04-12 13:59:24 · 1051 阅读 · 0 评论 -
判断一个数是否是素数
打表:#define N 1000bool isprime[N];//是素数的为1int prime[N], nprime;void doprime(){ long long i, j; nprime = 0; memset(isprime, true, sizeof(isprime)); isprime[1] = 0; for (i=2原创 2013-04-23 08:49:09 · 533 阅读 · 0 评论 -
擅长排列的小明II 南工469
题目链接:南工469(为了简便起见,我们用Ai代表第i个数字)由于A1一直是1,所以A2只能是2或3。1.当A2=2时,从A2到An的排列(2~n)相当于从A1到An-1的排列(1~n-1)(把每个数字都加1),一共有f[n-1]种情况。2.当A2=3时,A3可能为2,4,5。 当A3=2时,A4一定等于4,此时从A4到An的排列(4~n)相当原创 2013-04-18 09:47:10 · 618 阅读 · 0 评论 -
欧拉函数
//欧拉函数:求不超过n且与n互素的正整数的个数long long phi(long long n){ long long rea = n; for (int i=2; i*i<=n; i++) { if (n%i==0) { rea-=rea/i; do n/=i;原创 2013-04-26 10:21:14 · 644 阅读 · 0 评论 -
NYOJ 517 最小公倍数(java实现)
题目链接:here~~采用素因子分解法求解(1~n的最小公倍数) import java.math.BigInteger;import java.util.Scanner;public class Main{ public static BigInteger f(int n) { int[] x = new int[n+1]; for(int i=1; i<=n; i+原创 2013-04-27 22:21:36 · 689 阅读 · 0 评论 -
NYOJ 一个简单的数学题 南工330
题目链接:here~~模拟普通的除法,当遇到已经出现过的余数时停止,一开始余数是1本身,还要注意的是当余数乘一个10还是不大于被除数时,余数是乘10之后的余数,比如:1/99,1*10=10还是小于99,那么余10,这个余数也要标记!下面是我看到的比较好的代码:(比较之后发现第一个时间较短)#include #include using namespace std; char a[1原创 2013-04-20 21:05:07 · 1164 阅读 · 0 评论 -
次方求模 南工102
题目链接:here~~运用二分的思想,如果幂是偶数就先让结果乘以a,然后幂除2,让a再等于a的平方,直到b==0#include using namespace std;int main(){ long long n, s, a, b, c; cin>>n; while (n--) { cin>>a>>b>>c; s原创 2013-04-22 18:36:48 · 537 阅读 · 0 评论 -
zjut 1517 浙江工业大学oj Is it a prime?
题目链接:here~~判断一个很大很大的数是不是素数,使用Miller-Rabin素数测试,产生随机数来验证是否满足费马小定理#include #include #include using namespace std;#define N 5typedef long long LL;LL random(LL n){ return (LL)((double)rand()原创 2013-05-02 11:18:53 · 1037 阅读 · 0 评论 -
判断很大的数是不是素数(模版)
#include #include #include using namespace std;#define N 5//修改产生随机数的个数,越多越准确typedef long long LL;LL random(LL n){ return (LL)((double)rand()/RAND_MAX*n+0.5);}LL multi(LL a, LL b, LL m)//原创 2013-05-02 11:20:40 · 821 阅读 · 0 评论 -
数学小知识总结(每次更新)
1:求一个mxn的矩形中能找出多少个矩形:res=m*(m+1)*n*(n+1)/4;2:斐波那契的整除:fn能被3整除当且仅当n可以被4整除,fn能被4整除当且仅当n可以被6整除,fn能被12整除当且仅当n可以被12整除(4和6的最小公倍数),n能被12整除等价于fn能被3和4整除!3:如果gcd(a, b)==1,则称a和b互素。4:位数公式:求一个数n的位数,位数=(int)lo原创 2013-04-22 15:45:14 · 926 阅读 · 0 评论 -
梅森素数(判定)
Lucas-Lehmer判定法//判断一个数是不是梅森素数#include using namespace std;typedef long long LL;LL sum, data[66], tmp;LL multi(LL a, LL b, LL m)//a*b%m{ LL ret=0; while (b) { if (b&1) ret=(原创 2013-05-08 10:40:01 · 2298 阅读 · 0 评论 -
NYOJ Fibonacci数列(四)
Fibonacci数列有通项公式为:化简log10(fn)=n*log10((1+sqrt(5))/2)-log10(sqrt(5))+log10(1-((1-sqrt(5))/(1+sqrt(5)))^n)后面红色部分是无穷小量,可以省略。于是log10(fn)=n*log10((1+sqrt(5))/2)-log10(sqrt(5));最后可以计算出log10(fn),保留它的原创 2013-04-24 19:08:22 · 565 阅读 · 0 评论 -
POJ 1061 青蛙的约会
题目链接:here~~扩展欧几里得算法求同余方程,求一个最小解。自己也不懂,当成模板使用:#include long long X,Y;void Gcd(long long A,long long B,long long &gcd){ if(B){Gcd(B,A%B,gcd);long long t=X;X=Y;Y=t-(A/B)*Y;} else {gcd=A;X=1,Y=0;原创 2013-04-25 18:36:11 · 671 阅读 · 0 评论 -
杭电1018 阶乘位数
Big NumberTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 19179 Accepted Submission(s): 8602Problem DescriptionIn many applicatio原创 2013-04-12 14:06:55 · 587 阅读 · 0 评论 -
素数定理(素数的分布)
素数有无穷多个,能估计出小于一个正实数x的素数有多少个,并用pi(x)来表示,这就是素数定理。随着x的增长,pi(x)/(x/lnx)=1素数分布n10^310^410^510^610^7pi(n)1681229959278498664579n/lnn145108686867838262原创 2013-04-22 21:32:37 · 3167 阅读 · 0 评论 -
NYOJ 我排第几个 南工139
题目链接:here~~康托展开的应用实例{1,2,3,4,...,n}表示1,2,3,...,n的排列如 {1,2,3} 按从小到大排列一共6个。123 132 213 231 312 321 。代表的数字 1 2 3 4 5 6 也就是把10进制数与一个排列对应起来。他们间的对应关系可由康托展开来找到。如我想知道321是{1,2,3}中第几个大的数可以原创 2013-04-22 13:08:18 · 752 阅读 · 0 评论 -
康托逆展开 总结
康托展开的逆运算例1 {1,2,3,4,5}的全排列,并且已经从小到大排序完毕(1)找出第96个数首先用96-1得到95用95去除4! 得到3余23有3个数比它小的数是4所以第一位是4用23去除3! 得到3余5有3个数比它小的数是4但4已经在之前出现过了所以第二位是5(4在之前出现过,所以实际比5小的数是3个)用5去除2!得到原创 2013-04-22 14:59:06 · 640 阅读 · 0 评论 -
南工219 A Problem About Date
#includeint main(){ int y,m,d; while(~scanf("%d%d%d",&y,&m,&d)) { if(m<3) m+=12,--y; printf("%d\n",(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7); //蔡勒公式的变种 }} 套用公式,月份先处理,公式里原创 2013-04-14 20:52:02 · 518 阅读 · 0 评论 -
NYOJ 最大素因子 南工520
题目链接:here~~在找素数的时候把找的数对应的最大素因子的序数赋到一个数组里#include #include using namespace std;#define N 1000010int prime[N];//存放数n的最大质因子是第几个int nprime;void doprime(){ int i, j; nprime = 0; me原创 2013-04-23 12:12:07 · 705 阅读 · 0 评论 -
NYOJ p次方求和 南工420
题目链接:here~~二分法求n的m次方#include #include #include using namespace std;int pp(int i, int m){ int sum=1; while (m) { if (m&1) sum=sum*i%10003; m>>=1; i=i*i%10原创 2013-04-23 10:18:51 · 672 阅读 · 0 评论 -
NYOJ A*B Problem 南工485
题目链接:here~~分析:对于一个整数n,设f(n)为n的各个位之和,有这样一个等式 n%9=f(n)%9;证明:同余定理(a+b)%c=(a%c+b%c)%c,还有显然成立和k*(10^M)%9=k,代入到n%9=f(n)%9中,即可得证n%9=f(n)%9是成立的。还要注意我们所求的是一个一位数,而我们是对9取余的,当余数为0时,我们要的结果可能是0,可能是9。是0的情况原创 2013-04-23 13:43:06 · 858 阅读 · 0 评论 -
NYOJ 街区最短路径问题 南工7
题目链接:here~~求出中间的x和中间的y,求各个点到这个点的距离和。。。#include #include #include using namespace std;struct cd{ int x, y;}a[20];bool cmp1(cd c, cd d){ return c.x<d.x;}bool cmp2(cd c, cd d){原创 2013-04-23 19:31:09 · 646 阅读 · 0 评论 -
NYOJ 光棍节的快乐 南工451
题目链接:here~~求组合数X错排数#include #include using namespace std;double myc(int n, int m){ double sum; sum = 1; for (int i=1; i<=m; i++) sum=sum*(n-i+1)/i; // cout<<sum<<endl;原创 2013-04-23 09:15:38 · 635 阅读 · 0 评论 -
NYOJ 斐波那契数列四吧 南工314
题目链接:here~~设一个方程x*f(1)+y*f(2)=f(20),方程的解x和y代表f(20)由x个f(1)和y个f(2)组成,我们看一下斐波拉契数列:1,1, 2, 3, 5,8,13,21,34......第18项2584,第19项4181,第20项6765可知:f(20)=f(18)+f(19),也可以写为f(20)=2584*f(1)+4181*f(2),因为斐波那契数列原创 2013-04-23 17:41:36 · 787 阅读 · 0 评论 -
NYOJ 月老的难题南工478
题目链接:here~~#include #include using namespace std;int a[500010];int main(){ int n, N; for (int i=1; i*i<=500000; i++) { for (int j=i; j*i<=500000; j++) {原创 2013-04-24 17:35:05 · 739 阅读 · 0 评论 -
数学小模版
求n的p次方(模版)int pow(int n, int m){ int sum=1; while (m) { if (m&1) sum=sum*n%10003; m>>=1; n=n*n%10003; } return sum;}求一个n位数N(n很大)对M求余int Mod(char* bi原创 2013-04-23 10:21:48 · 552 阅读 · 0 评论 -
NYOJ 阶乘因式分解(二)南工70
题目链接:here~~牛人的解释可以想象,n的阶乘因子从1开始到n,阶乘因式分解第一个可以出现m的是m那一项,接着必定是2m那一项,接着是3m、4m..pm..km=n.则首先可以判断里面出现了k个质因子m, 但是中间的一项pm中p可能等于m,也可能等于m*m,m*m*m等,所以n/m同时也表示最后一个含有质因子m且小于n的最大的阶乘因子,也就是上面的k,所以k/m得到的就是k里面还有原创 2013-04-24 09:23:34 · 1114 阅读 · 0 评论 -
组合数的生成(代码加解释)
# include //生成从1-n中取m个数的组合,组合从小到大void born(int n, int m){ int i, j, temp; int a[100]; for (i = 0; i<m; i++) //初始化第一个组合并输出 { a[i] = i+1; printf("%d", a[i]); } printf("\n"); i = 0; //循环终止原创 2013-04-17 11:16:03 · 1453 阅读 · 0 评论 -
扩展欧几里得算法求一次同余方程的解(一个最小解的情况)
扩展欧几里得算法求一次同余方程的解(一个最小解的情况)long long X,Y;void Gcd(long long A,long long B,long long &gcd){ if(B){Gcd(B,A%B,gcd);long long t=X;X=Y;Y=t-(A/B)*Y;} else {gcd=A;X=1,Y=0;}}void GCD(long long A, long原创 2013-04-25 18:38:35 · 2005 阅读 · 1 评论 -
POJ 1019 Number Sequence
转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1301527312大致题意:有一串数字串,其规律为1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 1234567891011 123456789101112······k输入位转载 2013-07-15 21:26:28 · 568 阅读 · 0 评论