查找数字规律公式的网站:  http://oeis.org/A005773

C++头文件:    #include <bits/stdc++>

链接:  http://blog.kuoe0.tw/posts/2014/01/31/install-gnu-gcc-on-os-x-and-use-the-header-bits-stdcplusplus-h-and-policy-based-data-structure/

一个数论讲的很好的博客:  http://www.cnblogs.com/linyujun/category/784324.html

辗转相除法:

1.最大公约数

1 int gcd(int a,int b){
2     if(b==0)
3         return a;
4     return gcd(b,a%b);
5 }

 1 LL gcd(LL a, LL b)
 2 {
 3     return b == 0? a : gcd(b, a % b);
 4 }
 5
 6 void ex_gcd(LL a, LL b, LL& d, LL& x, LL& y)
 7 {
 8     if(!b)
 9     {
10         d = a;
11         x = 1;
12         y = 0;
13     }
14     else
15     {
16         ex_gcd(b, a % b, d, y, x);
17         y -= x * (a/b);
18     }
19 }

2.扩展欧几里德算法

ax+by=gcd(a,b)

 1 int extgcd(int a,int b,int &x,int &y){
 2     int d=a;
 3     if(b!=0){
 4         d=extgcd(b,a%b,y,x);
 5         y-=(a/b)*x;
 6     }
 7     else{
 8         x=1;
 9         y=0;
10     }
11     return d;
12 }

有关素数的基础算法:

1.素数判定

 1 //素性测试
 2 bool prime(int n){
 3     for(int i=2; i*i<=n; i++){
 4         if(n%i==0)
 5             return false;
 6     }
 7     return n!=1;  //1是例外
 8 }
 9
10 //约数枚举
11 vector<int> dis(int n){
12     vector<int> res;
13     for(int i=1; i*i<=n; i++){
14         if(n%i==0){
15             res.push_back(i);
16             if(i!=n/i)
17                 res.push_back(n/i);
18         }
19     }
20     return res;
21 }
22
23 //整数分解
24 map<int,int> prime(int n){
25     for(int i=2; i*i<=n; i++){
26         while(n%i==0){
27             ++res[i];
28             n/=i;
29         }
30     }
31     if(n!=1)
32         res[n]=1;
33     return res;
34 }

2.埃氏筛法

 1 int prime[MAX_N]; //第i个素数
 2 bool is_prime[MAX_N+1]   //is_prime[i]为true表示i是素数
 3
 4 //返回n以内素数的个数
 5 int solve(int n){
 6     int p=0;
 7     for(int i=0; i<=n; i++)
 8         is_prime[i]=true;
 9     is_prime[0]=is_prime[1]=false;
10     for(int i=2; i<=n; i++){
11         if(is_prime[i]){
12             prime[p++]=i;
13             for(int j=2*i; j<=n; j+=i)
14                 is_prime[i]=false;
15         }
16     }
17     return p;
18 }

3. 区间筛法

 1 typedef long long ll;
 2
 3 bool is_prime[MAX_L];
 4 bool is_prime_small[MAX_B];
 5
 6 //对区间[a,b)内的整数执行筛法.is_prime[i-a] = true  --  i是素数
 7 void segment_sieve(ll a,ll b){
 8     for(int i=0; (ll)i*i<b; i++)
 9         is_prime_small[i]=true;
10     for(int i=0; i<b-a; i++)
11         is_prime[i]=true;
12     for(int i=2; (ll)i*i<b; i++){
13         if(is_prime_small[i]){
14             for(int j=2*i; (ll)j*j<b; j+=i)
15                 is_prime_small[j]=false;  //筛[2,根号b)
16             for(ll j=max(2LL,(a+i-1)/i)*i; j<b; j+=i)
17                 is_prime[j-a]=false; //筛[a,b)
18         }
19     }
20 }

模运算

 1 LL qpow(LL x, LL k)
 2 {
 3     LL res = 1;
 4     while(k)
 5     {
 6         if(k & 1) res = res * x % MOD;
 7         x = x * x % MOD;
 8         k >>= 1;
 9     }
10     return res;
11 }
12
13 LL inv(LL a, LL x)
14 {
15     return qpow(a, x - 2);
16 }

凸包:

  1 struct point
  2 {
  3     double x;
  4     double y;
  5     point (double x = 0, double y = 0):x(x), y(y)
  6     {}
  7 };
  8 typedef point Vector;//向量
  9 Vector operator + (Vector A, Vector B)//向量加法
 10 {
 11     return Vector(A.x + B.x, A.y + B.y);
 12 }
 13
 14 Vector operator - (Vector A, Vector B)//向量减法
 15 {
 16     return Vector(A.x - B.x, A.y - B.y);
 17 }
 18
 19 Vector operator * (Vector A, double p)//向量乘法
 20 {
 21     return Vector(A.x * p, A.y * p);
 22 }
 23
 24 Vector operator / (Vector A, double p)//向量除法
 25 {
 26     return Vector(A.x / p, A.y / p);
 27 }
 28
 29 int dcmp(double x)//精度控制
 30 {
 31     if(fabs(x) < eps) return 0;
 32     else
 33         return x < 0? -1 : 1;
 34 }
 35
 36 bool operator == (const point& a, const point& b)//判断点相等
 37 {
 38     return dcmp(a.x - b.x) == 0 && dcmp(a.y - b.y) == 0;
 39 }
 40
 41 double Dot(Vector A, Vector B)//向量点积,A*B,垂直为0
 42 {
 43     return A.x * B.x + A.y * B.y;
 44 }
 45
 46 double Length(Vector A)//向量长度
 47 {
 48     return sqrt(Dot(A, A));
 49 }
 50
 51 double Angle(Vector A, Vector B)//向量极角
 52 {
 53     return acos(Dot(A, B) / Length(A) / Length(B));
 54 }
 55
 56 double Cross(Vector A, Vector B)//向量叉乘,AXB, 有向面积的两倍
 57 {
 58     return A.x * B.y - A.y * B.x;
 59 }
 60
 61 double Area2(point A, point B, point C)//两向量组成的四边形的有向面积
 62 {
 63     return Cross(B - A, C - A);
 64 }
 65 Vector Rotate(Vector A, double rad)//向量A,逆时针旋转rad°, 极角形式
 66 {
 67     return Vector(A.x * cos(rad) - A.y * sin(rad), A.x * sin(rad) + A.y * cos(rad));
 68 }
 69
 70 Vector Normal(Vector A)//A will not 0 Vector!, 求单位向量
 71 {
 72     double L = Length(A);
 73     return Vector(A.x / L, A.y / L);
 74 }
 75
 76 Vector GetLineIntersection(point P, Vector v, point Q, Vector w)//求两向量的交点(不求具体坐标)
 77 {
 78     Vector u = P - Q;
 79     double t = Cross(w, u) / Cross(v, w);
 80     return P + v * t;
 81 }
 82
 83 double DistanceToLine(point P, point A, point B)// 点到直线的距离
 84 {
 85     Vector v1 = B - A, v2 = P - A;
 86     return fabs(Cross(v1, v2)) / Length(v1);
 87 }
 88
 89 double DistanceToSegment(point P, point A, point B)//点到线段的距离
 90 {
 91     if(A == B) return Length(P - A);
 92     Vector v2 = P - A, v3 = P - B, v1 = B - A;
 93     if(dcmp(Dot(v1, v2) < 0)) return Length(v2);
 94     else if(dcmp(Dot(v1, v3)) > 0) return Length(v3);
 95     else
 96         return fabs(Cross(v1, v2)) / Length(v1);
 97 }
 98
 99 point GetLineProjection(point P, point A, point B)//求点在直线上的投影
100 {
101     Vector v = B - A;
102     return A + v * (Dot(v, P - A) / Dot(v, v));
103 }
104
105 bool SegmentProperIntersection(point a1, point a2, point b1, point b2)//两线段是否相交
106 {
107     double c1 = Cross(a2 - a1, b1 - a1);
108     double c2 = Cross(a2 - a2, b2 - a1);
109     double c3 = Cross(b2 - b1, a1 - b1);
110     double c4 = Cross(b2 - b1, a2 - b1);
111     return dcmp(c1) * dcmp(c2) < 0 && dcmp(c3) * dcmp(c4) < 0;
112 }
113
114 bool OnSegment(point P, point a1, point a2)// 点是否在线段上
115 {
116     return dcmp(Cross(a1 - P, a2 - P)) == 0 && dcmp(Dot(a1 - P, a2 - P)) < 0;
117 }
118
119 double PolygonArea(point *p, int n)// 凸多边形(多边形)的有向面积
120 {
121     double area = 0;
122     for(int i = 1; i < n - 1;  i ++)
123     area += Cross(p[i] - p[0], p[i + 1] - p[0]);
124     return area / 2.0;
125 }

正多边形内接圆半径:

1 double getlen(double n,double r/){  //n正多边形边数,r正多边形边长
2      return 2.0*r*tan(pi/n);   //const int PI = acos (-1.0);
3 }

中国剩余定理模板:  http://blog.csdn.net/qq_32734731/article/details/51182391

 

数论可学习的链接:    http://www.cnblogs.com/linyujun/category/784324.html

模板来自 : -> 萌哒哒~毅哥

<<挑战程序设计竞赛>>读后感......

转载于:https://www.cnblogs.com/wangmengmeng/p/5321480.html

数学问题的解题方法(模板)相关推荐

  1. 排队问题解题思路_高考文科数学是最“拉分”的!6种题型分析与10大解题方法...

    我回来啦~~好多天没更了. 最近私信挺多的,很多人跟我说学习毫无章法,总是高投入低产出,大量的时间.精力投入,成绩却不见起色.包括当年我自己上高中的时候,也是这样. 问题其实就是上课听懂了.但是一做题 ...

  2. 同底数幂比较大小方法_知识体系构建:初中数学4大知识点及10大解题方法总结(干货)...

    基本知识 1.数与代数 A.数与式: 1. 有理数 ■ 有理数: ①整数→正整数/0/负整数 ②分数→正分数/负分数 ■ 数轴: ①画一条水平直线,在直线上取一点表示0(原点),选取某一长度作为单位长 ...

  3. 数学猜想验证步骤_高中数学解题思路与技巧汇总,19种解题方法,实用!

    解数学题,除了掌握有关的数学知识之外,最好掌握一定的解题技巧甚至知道点解题思想.要知道高考试题的解答过程中蕴含着重要的数学思想方法,如果能有意识地在解题过程中加以运用,势必会取得很好的效用.下面邦德华 ...

  4. c语言 解元二次函数的源代码,学霸强推,高中数学万能解题方法,对数学一筹莫展的你必看!...

    数学不好怎么办,你有多头疼数学成绩?你还担心自己学不好数学吗?其实只要掌握学习的方法,数学就能迅速提升. 今天,小编整理了一份学霸们强推的数学解题方法,对大家肯定有帮助,数学不好的一定要看! 本文适合 ...

  5. 高中数学必修一函数值域解题方法

    作者:vxbomath 数学,是一门重视逻辑思维的学科.在所有的科目当中,数学是一门做好拉分,也是丢分最惨的学科.很多学生数学是最难的学科,不仅需要仔细细心,还需要很强的逻辑思维能力才能够学好数学.因 ...

  6. 肖博高考数学二轮复习方法之圆锥曲线 解题策略附带题型解析

    高考数学二轮复习方法椭圆.双曲线.抛物线是解析几何的重点,高考主要考查定义,标准方程,几何性质,直线与圆锥曲线的位置关系,有时和函数.不等式.平面向量相结合考查综合性问题.一般情况下,高考的考查难度中 ...

  7. 3种SAT数学解题方法介绍

    SAT数学考试对于中国内地的考生来说相对比较简单,但是并不是每一个人都如此.所以掌握SAT数学解题方法就成为了必要的手段.SAT数学解题方法可以让更多的人提高SAT数学的成绩,下面就是详细内容. 1. ...

  8. SAT数学解题方法:逻辑推理

    SAT数学考试的方式和国内不同,考察的重点也不一样,所以虽然SAT数学考试的内容,中国的考生们都已经掌握了,但是还是需要积累一些相关的SAT数学解题方法.下面就为大家介绍一个非常常用的方法,利用逻辑推 ...

  9. 最好用的SAT数学解题方法

    SAT数学考试对中国的考生来说虽然比较简单,但是也是需要掌握一些解题方法的.下面就为大家搜集整理了一种最实用的SAT数学解题方法,应用的范围非常广泛,供大家参考,希望各大家一些借鉴. 这个最实用的SA ...

最新文章

  1. 从《王者荣耀》谈游戏的帧同步
  2. YUIDoc的使用方法小结
  3. html 加粗_若想学前端开发,要从HTML基本元素开始第一节
  4. CentOS7 64位下MySQL5.7安装与配置(YUM)
  5. mysql在cmd命令行下的相关操作
  6. PYTHON-anaconda-安装
  7. edu汇编语言——实训课程
  8. 巴菲特:伯克希尔没有所谓的5G核心能力 子公司会涉足相关行业
  9. 淘宝海报字体素材模板,让你的海报字体活起来!
  10. ElasticSearch:图解ElasticSearch的搜索过程
  11. JDK8-u271/u272的jre和jdk/jre的文件有差异
  12. wps linux版本支持vba,Wps vba安装包
  13. 俄罗斯方块(C/C++)
  14. 接口耗时优化与cpu飙高解决
  15. 吃透Kafka六:topic 创建过程
  16. windows-sys15:windows11 Android 子系统安装和apk应用安装
  17. so easy 的 Vue3.0自定义指令(也搜一贼)
  18. 第二十天: Linux文件管理+Linux备份压缩+网络与磁盘管理+shell与安装
  19. 微火上线ai绘画小程序搭建系统,ai绘画小程序源码触手可及
  20. ubuntu 进不去界面解决方案

热门文章

  1. 10个随机数相加等于100
  2. PHP下的Oauth2.0尝试 - 授权码授权(Authorization Code Grant)
  3. PacificA 一致性协议解读
  4. Mybatis底层原理学习(二):从源码角度分析一次查询操作过程
  5. 实现 Java 多线程并发控制框架
  6. bitcoin转账api,python3.7
  7. 动捕技术是拯救VR体验的关键,但如何落地却已成为世界难题
  8. PL/SQL 中文显示乱码解决方案
  9. Tree的实现,js开发组件dtree
  10. 致远互联“平台+生态”抢占数字化升级新赛