数学概念与方法
文章平均质量分 54
AledaLee
个人博客已经迁移到了https://sites.google.com/site/lishuo02wiki/,主要是一些技术的分享,有需要的可以访问。
展开
-
筛选法求10^7以内的素数
以前对素数的筛选法,一直都不是了解的那么透彻.现在总算是知道了一个非常简单,也非常快的算法代码了.其实筛选法,之所以为筛选法 就是先筛,后选.第一步就是筛掉所有的偶数,以为,作为偶数首先它就是能被2正除了,就是合数了.肯定不能要;接着就是选了,选有技巧,选择性的筛除sqrt(n)以内的所有倍数,剩下的就都是素数了.代码如下:#include #include #includ原创 2012-07-17 21:55:06 · 1500 阅读 · 0 评论 -
数论初步之大整数取模(同余取模)
首先应该是把整数写成"自左向右"的形式,例如 123 = (1 * 10 + 2) * 10 + 3;有了这个就很容易看出 123 % m = (1 * 10 + 2) * 10 + 3 % m;这样就可以一步一步的取模了贴出代码:/* *大整数的取模取模 *运用到的是同于取模 *如果有需要改正的 *请指出,呵呵 *题目描述:输入正整数,n和m,输出n % m的值,原创 2013-01-05 22:08:14 · 2108 阅读 · 0 评论 -
数论初步之快速幂取模
快速幂的写法完全是我自己完成的哦,你们不要跟我强功,呵呵,其实是自己找不到,呵呵;没事自己写的感觉还不错呢.快速幂取模就是用到了线性取模,呵呵.很简单的,.现在贴出我的代码:/* *输入正整数a,n和m,输出a^n % m 的值,a,n,m <= 10^9; *这是一个幂取模的题目 *下面的就是一个比较朴素的算法了,时间复杂度是O(n); */ #include原创 2013-01-05 22:49:06 · 815 阅读 · 0 评论 -
数学初步之素因数分解(快速)
上次写了一次,有次选拔赛,自己还是没有写出来,后悔死了,现在又重新巩固了一遍,明天继续巩固一下,一定要记住,像这些经常用的算法,唯一的办法就是多运用了.多做题目就能记得更清楚;贴出代码:/*素因数分解继续写*/#include #include #include #include #include using namespace std;int mai原创 2013-01-10 22:35:27 · 1037 阅读 · 0 评论 -
5.1.5(大数阶乘)
诶呀呀,,其实很久以前就是看过别人写的大数阶乘了的,,但是,今天写起来还是想了半天还是没有写出来呀看了看书,才豁然开朗..诶哟哟,这次一定要掌握了,这都多长时间了 如果还是没有掌握的话,那真的就是自己没有用心学..呜呜贴出代码:#include #include #include #include using namespace std;const int maxn =原创 2013-01-29 10:36:07 · 567 阅读 · 0 评论 -
6174黑洞问题
6174问题是个黑洞问题.因为所有的4位数,做了正排序,做了逆排序,最终都会到6174问题而结束循环,,,这说明了数学的有趣其实做过一次这个题目,不过忘了是哪一题了贴出现在的代码:#include #include #include #include using namespace std;char str[111];int num[1111];int g原创 2013-02-02 13:27:04 · 1669 阅读 · 0 评论 -
7.2.1(按照字典序全排列)
诶诶诶,,,又忘了全排列的模版函数了,,,晕死了..忘了存到哪里去了,,呜呜,,下次一定存到博客上面来.,..不对呀...我记得存进来了呀??需要注意的地方我都标记了#include #include #include #include using namespace std;const int maxn = 11111;int n;int a[maxn];v原创 2013-02-06 20:27:26 · 745 阅读 · 0 评论 -
7.3.2(子集生成1)
学到了那个用标记的方法生成所有的子集,主要的方法就是把所有的元素都先标记上,然后再一个一个的标记,反标记,然后再把元素一起输出来,方法比较好.也比较容易上手,就是一个递归的小程序;主要的是那个对应映射的关系;代码:#include #include #include #include using namespace std;int n;int A[1111原创 2013-02-06 22:02:08 · 636 阅读 · 0 评论 -
NOj-1378(战斗吧,皇后!)
晕死啦,晕死啦..呜呜..怎么可以这样呢,,其实都是怪自己没有静下心来好好的思考问题呀!!这样的问题还是很好推出答案的,只要自己够小心就能出结果呀,,,诶诶..贴出自己的代码:#include #include #include #include using namespace std;__int64 A(int r, int n){ __int64 s原创 2013-03-20 19:27:10 · 995 阅读 · 0 评论 -
NOJ-(strling数)
[1379] 小球划分时间限制: 1000 ms 内存限制: 65535 K问题描述将N个不同的小球分成若干组,问总共有多少总分法输入包含多组数据,每行一个数n,表示共有n个小球。(1≤x≤1000).输出对每组数据,输出一行:不同的方法数,因为这个数可能非常大,我们只需要它除以10000的余数。样例输入123样例输出原创 2013-03-21 19:47:33 · 1201 阅读 · 0 评论 -
HDU-1042(大数阶乘_java)
N!Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 40878 Accepted Submission(s): 11339Problem DescriptionGiven an integer N(0原创 2013-04-10 20:44:56 · 890 阅读 · 0 评论 -
AcMore-1493(划分问题)
诶呀妈呀,这么牛!!!波哥就是牛,他的一个结论让我以后接这些问题都迎刃而解了,那就是一般的划分问题都满足,2次方程及f(x) = a*x*x + b * x + c;而且我验证了这个,还就是这么回事,所以真是个神奇的东西!!!!;贴出他的:D.平面划分推理题: 新加入的一条直线与前面的直线都相交能够得到最多的空间划分。考虑到绿原创 2013-04-14 22:40:36 · 776 阅读 · 0 评论 -
HDU-2136(素数问题)
Largest prime factorTime Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4916 Accepted Submission(s): 1728Problem DescriptionEvery原创 2013-04-16 14:35:49 · 1189 阅读 · 0 评论 -
A(HDU3944)---Lucas
DP?Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 128000/128000 K (Java/Others)Total Submission(s): 1629 Accepted Submission(s): 552Problem DescriptionFigure 1 shows t原创 2013-05-16 22:46:11 · 904 阅读 · 0 评论 -
HDU-4602
诶,其实自己在这种推规律上面的题目非常的陌生,基本上很长时间才能做出来,主要的就是自己列举的例子少,然后就是做的题目少,自己没有过多的思路想问题。燥。拿出解题报告的解释吧。我们可以特判出n 对于1 情况考虑: 第一种情况,被选出的不包含端点,那么有(n – k − 1)种情况完成上述操作,剩下未被圈的点之间还有(n – k − 2)个位置,可以在每个位置断开,所以共原创 2013-07-23 21:35:07 · 959 阅读 · 0 评论 -
最长子序列
今天有道题目,自己思路非常的明显,但就是做不出来,不觉感到自己的水平真的很差。主要是基础没有打好啊。基础的打法,当然就是时常复习,领悟以前的知识,然后努力的,新奇的创造新的算法思路。最长子序列,这是老的知识点了,以前双重循环好像做过,但是已经忘了一干二净了,这是个贪心的思想。首先,明白一个算法,我们就要想着,我们是怎么样用我们的大脑做出这样的简单的题目呢?我老早就在以前的文章上,让自己原创 2013-07-23 23:05:00 · 897 阅读 · 0 评论 -
HDU-2669(数论初步之扩展欧几里德)
晕死,原来HDU上面是不支持long long的,诶,,,郁闷死了,以后还是用_int64吧.真的不知道该肿么办了, 应该是_int64 都能用吧?这是个很裸的扩展gcd不想说了呵呵贴出代码:/**如此赤裸的扩展gcd*我都不好意思了*/ #include #include #include #include using namespace std;int原创 2013-01-05 21:11:52 · 898 阅读 · 0 评论 -
数论初步之欧几里德算法
欧几里德算法,也就是那个辗转相除法求最大公约数,最小公倍数的算法,就是要注意求最小公倍数的时候一定要先乘后除!#include #include #include #include using namespace std;/*辗转相除法-即欧几里德算法*/ int gcd(int a, int b){ return a % b == 0 ? b : gcd(b,原创 2013-01-04 22:21:15 · 546 阅读 · 0 评论 -
HDU-1215(数学技巧题目)
其实我们如果以前没有遇到过这种题目,然后自己再猛然遇到种数学技巧性的题目的时候是最无辜的....用以前的办法解决超时,而新的自己又不会...所以解决这种问题就是多做题目,多总结相似点.现在贴出代码,这代码当然也是参考别人的,嘿嘿#include #include #include #include int p[500005];int main(){ int T; fo原创 2012-07-27 11:23:51 · 687 阅读 · 0 评论 -
HDU-2899(简单数学问题+二分查找)
其实就是简单的数学求极值问题.看了代码大家都会知道的.本来是想好好学学二分查找这种方法的,但是发现专门考二分查找的不多,它只是种思想,是一种工具.贴出代码:#include #include #include #include const double eps=1e-8; int y;double g(double x){ return 42*pow(x,6原创 2012-08-13 10:43:05 · 1520 阅读 · 0 评论 -
HDU-1597(找规律)
本来是找二分查找的题目的,找到一个这个题目,,,开始一直在往二分上想.最后不得不放弃,,才发现,原来是个数学规律题目贴出代码大家看看吧:写的挺简单的...#include #include #include #include int main(){ int T; scanf("%d",&T); while(T--) { int N; scanf("%d"原创 2012-08-13 22:16:25 · 1377 阅读 · 0 评论 -
HUD-1076(简单利用筛法的题目)
其实自己选择做这道题目,就是想巩固一种思路,就是先将所有的可能的结果求出 存到一个数组中,然后算结果的时候直接去取就好,这样可以省了很多时间,比较简单这道题目,看代码:#include #include #include #include bool p[1000005];int main(){ int T; memset(p,0,sizeof(p)); for(int原创 2012-07-29 10:09:28 · 767 阅读 · 0 评论 -
HDU-1492(素因数分解_easy)
主要是要读好题目,题目中已经说好了,是丑数;贴出代码;#include #include #include #include __int64 N;int find(int x){ int sum=0; __int64 t=N; while(t%x==0) { sum++; t/=x; } return sum;}int main(){ int c原创 2012-08-14 16:38:52 · 713 阅读 · 0 评论 -
HDU-2136(prime_创新)
这道题目开始的时候也是没有看明白到底是个什么意思,,,看了别人的代码才知道原来是个这么意思,还是不懂是个什么意思其实,,看代码算了..嘿嘿贴出:#include #include #include #include #define MAXN 1000001int prime[MAXN];int main(){ memset(prime,-1,sizeof(p原创 2012-08-13 22:43:18 · 629 阅读 · 0 评论 -
HDU-1164(质因数分解)
很简单的一道题目,分享我的代码:#include #include #include #include #define MAXN 100000bool p[MAXN];int main(){ memset(p,1,sizeof(p)); p[1]=0; for(int i=4;i<=MAXN;i+=2) p[i]=0; for(i=3;i<=sqrt(MAX原创 2012-08-14 15:50:52 · 1148 阅读 · 0 评论 -
HDU-1333(分解素因数)
这个题目我都想死了,,做了整整一上午,当然包括看知识点,,但其实这是一个比较水的题目..- -#晕死了都..注意那个if(flag)耗费了无数精力才发现的...贴出代码:#include #include #include #include #define MAXN 100100001int N;int getsum(int x){ int sum=0;原创 2012-08-14 15:28:57 · 1455 阅读 · 2 评论 -
HDU-1286(数学)
这么个水题,让我敲了好长时间,,,我就不懂了.为什么能用n/2,而就是不能用sqrt(n)呢能漏掉什么答案么? 我一定得弄清楚 而且.如果加上while的话,,就错,我也不懂...等会研究清楚继续整贴出代码:#include #include #include #include bool hash[40000];int main(){ int T; scanf("%原创 2012-08-14 17:38:37 · 703 阅读 · 0 评论 -
HDU-1124(数学技巧)
看来前面的思路还是对的,就是说,其实判断0的个数就是判断2和5的个数,,,而2和5的最小的个数取决于零的个数.但是,开始的时候不知道有那么个规律 就是说,质因数分解的时候,前面的幂次必定小于后面的幂次.所以超时了,,呵呵.贴出代码,下面的是超时的哦...#include #include #include #include int main(){ int T; sc原创 2012-08-14 21:01:06 · 933 阅读 · 0 评论 -
HDU-2028(最小公倍数)
一道水题,我随便翻翻到的,想想自己说不定和这道题目有缘呢.呵呵,就做这玩吧呵呵.#include #include #include #include int a[1005];int gcd(int a,int b){ return a%b==0?b:gcd(b,a%b);}int main(){ int N; while(scanf("%d",&N)!=EO原创 2012-08-16 09:13:13 · 1265 阅读 · 0 评论 -
基础语言-题目40(求最大公约数和最小公倍数)
主要用到的还是gcd函数,很简单的一道题目,大家看看代码:#include #include #include #include #include using namespace std;int gcd (int a, int b){ return a % b == 0 ? b : gcd (b, a % b); }// 主要是一个gcd函数的运用,主要是回回写gcd原创 2012-11-15 20:27:25 · 748 阅读 · 0 评论 -
基础题目-素数分解(原创分享)
以前一直都不敢想这个问题,总觉得,这个问题应该是有什么高深的算法,现在上网查了查,也没有发现什么高深的算法,也就是这样写的.自己编了一次以后就有信心咯,呵呵.看看我的代码:/*质因数分解的问题,主要是进行如下步骤,第一步就是将求出所有的素数表,存入数组,然后再进行素数分解.注意: 首先输入你要分解的数字的个数,然后再输入你要分解的数字; */#include #in原创 2012-11-15 21:37:48 · 672 阅读 · 0 评论 -
数论初步之欧几里德
这里一定要注意,还有一种情况,当然这中情况以前没有接触到,就是任何数和0的最大公约数,应该是那个数本身的,原因就是,0除以任何数都可以整除.任何一个数都是零的约数,张见识了,原来gcd应该是那样写的忘了还是要再加一个点就是gcd的时间复杂度O(ln n^3 );看下面的代码:#include #include #include #include using n原创 2013-01-04 22:34:08 · 658 阅读 · 0 评论 -
数论初步之扩展欧几里德
扩展欧几里德算法主要是用来解决二元线性方程的整数解的问题,,运用到的主要是gcd的一些性质,把ax + by = n; 先利用:如果n % gcd(a, b) == 0 则存在着整数解,并且是无数组;否则,不成立,不存在着任何一组整数解使得成立,然后再进行一定的转换就可以 利用 扩展gcd了还是没有弄清楚他的运作步骤,但是还是把代码给记下来了,,一会在细细的研究一下下,用扩原创 2013-01-05 18:15:46 · 540 阅读 · 0 评论 -
小范围求整数的划分(递归实现)
泪奔了,求的范围太小了。估计也就到100,就很难进行下去了。因为种类数是在太多了。还只能用五边形数的那种方法解决。诶,还得研究那个东西,贴出来吧:#include #include #include #include using namespace std;int divInt(int n, int m){ if (n == 1 || m == 1) { return原创 2013-08-09 22:40:40 · 780 阅读 · 0 评论