随笔分类 -  数学

摘要:A : 暴力枚举B:找规律,也可以用数学方法找最小的x使得 a*x%b == 0 a,b已知(a=4*n b=n+1)x是所走的圈数,易得只要把x只要等于 b/gcd(a,b) 就满足了 然后答案就是a*x/b 即a/gcd(a,b)还要加上1,因为出发前就在1的位置走了一步了 所以答案 : a/gcd(a,b)+1;B题开始太草率了,被人黑了,于是又回来看B题,有点慌,直接导致没出题,raiting掉了。C:给你一个字符矩阵,由 '#' 和 ‘.’ 组成 问你最少去掉几个'#'就能使得'#'不连通由样例可得,不管什么图,最多去掉两个'# 阅读全文
posted @ 2012-06-04 03:54 Because Of You 阅读(248) 评论(0) 推荐(0)
摘要:matrix[i][j]表示第i个水桶要倒matrox[i][j](比例)的水到第j个水桶,由于倒的次数非常多,所以可以用矩阵连乘来优化,求出倒了m次后的结果如样例可得矩阵0 10.5 0.5这个矩阵连乘2次0.5 0.50.25 0.75就是倒2次水后的结果然后呢统计即可View Code #include <cstdio>#include <cstring>#define ld __int64const int maxn = 22;int n,m;struct Matrix{ double a[maxn][maxn]; void init() { for(... 阅读全文
posted @ 2012-03-02 16:14 Because Of You 阅读(428) 评论(0) 推荐(0)
摘要:其实这道题目的难点不在容斥原理,在于大数越界、取余等等的细节首先求出通项公式为n(2n+1)(n+1)(3n² +3n-1)/30求(a/b)%mod有两种方法1、原式=a%(b*n)/b2、原式=a*b^(phi(mod)-1)%mod;(其中b与mod互质)本题中,由于mod过大,采用第一种方法会出错,于是用了第二种方法。容斥过程中比如要加上2的四次,4的四次,6的四次。。。。可把2的四次提取出来,另外一项就变成了四次方和了View Code #include<cstdio>#include<cstring>#include<cmath>#in 阅读全文
posted @ 2012-02-26 19:21 Because Of You 阅读(839) 评论(0) 推荐(0)
摘要:View Code #include<stdio.h>#include<string>#include<stack> using namespace std;int main(){ int m,i,j,k; char ch[1000],map[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int t; scanf("%d",&t); while(t--){ __int64 n=0; stack<int>s; scanf("%d%d%s",&a 阅读全文
posted @ 2012-02-14 20:35 Because Of You 阅读(227) 评论(0) 推荐(0)
摘要:给你两个数的最大公约数和最小公倍数,让你求这两个数,使得两数之和最小利用最小公倍数和最大公倍数约数的性质来解决问:为什么a*i+b/i随i的增大而减小?答:i<=sqrt(c)=sqrt(b/a),设f(i)=a*i+b/i求导:f'(i)=a-b/(i*i)因为i<=sqrt(b/a),所以f'(i)<=0所以所以i越大f(i)越小,即两个数的和就越小,所以直接从i的最大值开始枚举,一旦符合条件就输出,另外a*i也肯定是大于b/i的View Code import java.util.*;import java.io.*;import java.lang.M 阅读全文
posted @ 2011-12-14 06:33 Because Of You 阅读(2178) 评论(1) 推荐(0)
摘要:矩阵相乘模板#include <cstdio>#include <cstring># define ld __int64struct Matrix{ ld a[2][2]; void init() { a[0][0]=a[1][0]=a[0][1]=1; a[1][1]=0; }};Matrix matrix_mul(Matrix a,Matrix b){ int i,j,k; Matrix ans; for(i=0;i<2;i++) { for(j=0;j<2;j++) { ans.a[i][j]=0; for(k=0;k<2;k++) ans.a[ 阅读全文
posted @ 2011-11-25 13:11 Because Of You 阅读(245) 评论(0) 推荐(0)
摘要:开始有点小郁闷,原因是编译器坏了,囧~View Code 1 #include<stdio.h> 2 #include<math.h> 3 const double eps = 1e-9; 4 double p[10010]; 5 int n,k; 6 int solve(double x) 7 { 8 int ans=0; 9 for(int i=0;i<n;i++) 10 ans+=int(p[i]/x); 11 return ans;12 }13 int main()14 {15 while(scanf("%d%d",&n... 阅读全文
posted @ 2011-11-10 09:27 Because Of You 阅读(359) 评论(0) 推荐(0)
摘要:引自百度百科R.亨斯贝尔格著李忠翻译的《数学中的智巧》一书,介绍了法雷级数。这里每一行从0/1开始,以1/1结尾,其它数自左至右将所有的真分数按增加顺序排列;第n行是由所有分母小于或等于n的真分数组成,我们称为n阶法雷级数。如下表: F1: 0/1 1/1 F2: 0/1 1/2 1/1 F3: 0/1 1/3 1/2 2/3 1/1 F4: 0/1 1/4 1/3 1/2 2/3 3/4 1/1 F5: 0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1 F6:0/1 1/6 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/... 阅读全文
posted @ 2011-11-02 23:33 Because Of You 阅读(446) 评论(0) 推荐(0)
摘要:先记录所有数相乘的质因子,再二分一个x判断x!是否能被M整除View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #define lld __int64 5 lld num[110]; 6 lld a[110],b[110]; 7 void cal(lld n,lld count) 8 { 9 int i,cnt; 10 for(i=2;i*i<=n;i++) 11 { 12 cnt=0; 13 if(n%i==0) 14 ... 阅读全文
posted @ 2011-10-28 16:12 Because Of You 阅读(341) 评论(0) 推荐(0)
摘要:View Code #include<stdio.h>#include<stdlib.h>__int64 exgcd(__int64 a,__int64 b,__int64 &x,__int64 &y){ if(b==0) {x=1;y=0;return a;} else { __int64 d=exgcd(b,a%b,x,y); __int64 t=x; x=y; y=t-a/b*y; return d; }}int main(){ __int64 a,b,x,y; while(sca... 阅读全文
posted @ 2011-10-05 02:01 Because Of You 阅读(203) 评论(0) 推荐(0)
摘要:View Code #include<stdio.h>#include<string.h>int prime[10000];int vis[10000];int ans;int a[10000];void init(){ int i,j; int n=12997; memset(vis,0,sizeof(vis)); for(i=2;i<=n;i++) for(j=i*2;j<=n;j+=i) vis[j]=1; ans=1; for(i=2;i<=n;i++) { if... 阅读全文
posted @ 2011-09-14 15:27 Because Of You 阅读(245) 评论(0) 推荐(0)
摘要:View Code #include<stdio.h>#include<math.h>#include<iostream>using namespace std;typedef __int64 lld;void gcd(lld a,lld b,lld &d,lld &x,lld &y){ if(!b) {d=a;x=1;y=0;} else { gcd(b,a%b,d,y,x);y-=x*(a/b);}}int main(){ lld x,y,m,n,l; lld a,b,c,d,g,s; scanf("%I64d%I64d 阅读全文
posted @ 2011-09-12 20:50 Because Of You 阅读(241) 评论(0) 推荐(0)