质数

  1. bool prime(int q)
  2. {
  3. if(q==||q==) return ;
  4. if(q==) return ;
  5. if(q%!=||q%!=) return ;
  6. int cnt=sqrt(q);
  7. for(int i=;i<=cnt;i+=)
  8. if(q%!=||q%(i+)!=) return ;
  9. return ;
  10. }

  1. //埃氏筛 筛出1~n的素数
  2. void prime_select()
  3. {
  4. for(int i=;i<=n;i++)
  5. {
  6. if(vis[i]) continue;
  7. printf("%d\n",i);
  8. for(int j=n;j<=n/i;j++) vis[i*j]=;
  9. }
  10. }

线性筛还是要学的qwq(真香),它的原理是每个合数会被它的最小质因子筛一次,利用了当前已经筛出的质数。复杂度真·O(N)

  1. //线性筛
  2. void prime_select()
  3. {
  4. //v[]记录下标数的最小质因子 初值为0
  5. for(int i=;i<=n;i++)
  6. {
  7. if(v[i]==) v[i]=i,prime[++m]=i;
  8. for(int j=;j<=m;j++)
  9. {//i是比prime[j]更小的质因子or超出n的范围
  10. if(prime[j]>v[i]||prime[j]>n/i) break;
  11. v[i*prime[j]]=prime[j];
  12. }
  13. }
  14. }

  1. //质因数分解--基于算术基本定理 复杂度O(根号n)
  2. void divide()
  3. {
  4. for(int i=;i<=sqrt(n);i++)
  5. if(n%i==)
  6. {
  7. p[++m]=i;c[m]=;
  8. while(n%i==) n/=i,c[m]++;
  9. }
  10. if(n>) p[++m]=n,c[m]=;
  11. for(int i=;i<=m;i++)
  12. printf("%d^%d\n",p[i],c[i]);
  13. }

丢几个例题跑嘤嘤嘤

例题1 LuoguP1865 A%B Problem ---(本博客开通不久的旧文

   因为数据范围较水,仅1e6,所以我们可以先使用线性筛筛出素数。区间个数用前缀和维护。它珂以当做一个练线性筛的不错模板题。

例题2 UVA10140 Prime Distance  --(题解一篇

   我们知道,任意一个合数x一定包含不超过sqrt(n)的质因子。

   所以我们就筛出2~sqrt(R)之间的所有素数,用他们来标记全部范围内的合数。最后没被标记的数就是质数,比较相邻的质数位置取最大。

例题3 阶乘分解 没有题面,口胡一下。

   把N!分解质因数,按算术基本定理的形式输出。(N为1e6级别)

   N!中质因数p的个数就等于1~N每个数含质因子p的个数之和。其他...详见lyd书p131,不会用LaTex,懒得打了...

   时间复杂度O(Nlogn)

约数

//  这样写书式的复习我肯定干不完...以后会简洁一点...(真香)

  • 基于算术基本定理,N的正约数集合个数为(a1+1)*(a2+1)*(a3+1)*........*(an+1)(基于乘法原理)($a_i$为算术基本定理中的各指数)
  • 求1~N每个数的正约数集合--倍数法
  1. //求1~N每个数的正约数集合--倍数法
  2. void work()
  3. {
  4. vector<int>fac[];
  5. for(int i=;i<=n;i++)
  6. for(int j=;j<=n/i;j++)
  7. fac[i*j].push_back(i);
  8. }

复杂度为O(N+N/2+N/3+N/4+...+N/N)=O(NlogN)(调和级数)

例题1 LuoguP1463反素数

例题2 LuoguP2261余数之和

  • $gcd(a,b)*lcm(a,b)=a*b$
  1. int gcd(int a,int b)
  2. {
  3. return b ? gcd(b,a%b) : a;
  4. }//辗转相除
  5. int gcd(int a,int b)
  6. {
  7. while(a!=b)
  8. {
  9. if(a>b)
  10. a-=b;
  11. else
  12. b-=a;
  13. }
  14. return a;
  15. }//更相减损
  • 欧拉函数:1~n中与n互质的数的个数

  • 1~n中与n互质的数的个数为$n*φ(n)/2$
  • 若a,b互质,则φ(a)φ(b)=φ(ab)。
  • 若n为质数,φ(n)=n-1
  1. void phi()
  2. {
  3. phi[]=;
  4. for(int i=;i<=n;i++) phi[i]=i;
  5. for(int i=;i<=n;i++)
  6. if(phi[i]==i)
  7. for(int j=i;j<=n;j+=i)
  8. phi[j]=phi[j]/i*(i-);
  9. }
  • 费马小定理:当p为质数时候, a^(p-1)≡1(mod p)
  • exgcd:https://www.cnblogs.com/nopartyfoucaodong/p/9514767.html

组合数学

  • 求法:https://www.cnblogs.com/nopartyfoucaodong/p/9543206.html
  • 圆排列:https://www.cnblogs.com/nopartyfoucaodong/p/9751569.html
  • 第二类strling数:https://www.cnblogs.com/nopartyfoucaodong/p/9690393.html
  • 卡特兰数:https://www.cnblogs.com/nopartyfoucaodong/p/9752461.html

数学补天 By cellur925的更多相关文章

  1. Luogu P2327 [SCOI2005]扫雷【递推/数学】By cellur925

    题目传送门 推了好久啊.看来以后要多玩扫雷了qwq. 其实本题只有三种答案:0.1.2. 对于所有第一列,只要第一个数和第二个数确定后,其实整个数列就确定了,我们可以通过这个递推式得出 sec[i-] ...

  2. NOIp 2014 解方程 【数学/秦九韶算法/大数取膜】By cellur925

    题目传送门 题意:求高次方程的解及其个数.其中 1° 我们知道,高次方程是没有求根公式的.但是利用逆向思维,我们可以进行“试根法”,因为题目中给出了所求根的范围.但是多项式系数过于吓人,达到了sxbk ...

  3. 茅台【思维/数学/剪枝】By cellur925

    题目传送门 给你\(n\)根木棍,问有多少种方法,使得选出的三根木棍能组成三角形. 开始想要用搜索的,但是写着写着卡壳了(?),于是改用贪心,开始对拍,觉得很稳,只是最后两个数据可能有点卡.很第一题难 ...

  4. Luogu P2158 [SDOI2008]仪仗队【数学/欧拉函数】by cellur925

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

  5. Luogu P1134 阶乘问题 【数学/乱搞】 By cellur925

    输入输出格式 输入格式: 仅一行包含一个正整数 NN . 输出格式: 一个整数,表示最右边的非零位的值. 输入输出样例 输入样例#1: 12 输出样例#1: 6 说明 USACO Training S ...

  6. 数学思想:为何我们把 x²读作x平方

    要弄清楚这个问题,我们得先认识一个人.古希腊大数学家 欧多克索斯,其在整个古代仅次于阿基米德,是一位天文学家.医生.几何学家.立法家和地理学家. 为何我们把 x²读作x平方呢? 古希腊时代,越来越多的 ...

  7. 速算1/Sqrt(x)背后的数学原理

    概述 平方根倒数速算法,是用于快速计算1/Sqrt(x)的值的一种算法,在这里x需取符合IEEE 754标准格式的32位正浮点数.让我们先来看这段代码: float Q_rsqrt( float nu ...

  8. MarkDown+LaTex 数学内容编辑样例收集

    $\color{green}{MarkDown+LaTex 数学内容编辑样例收集}$ 1.大小标题的居中,大小,颜色 [例1] $\color{Blue}{一元二次方程根的分布}$ $\color{R ...

  9. 深度学习笔记——PCA原理与数学推倒详解

    PCA目的:这里举个例子,如果假设我有m个点,{x(1),...,x(m)},那么我要将它们存在我的内存中,或者要对着m个点进行一次机器学习,但是这m个点的维度太大了,如果要进行机器学习的话参数太多, ...

随机推荐

  1. Machine Learning No.8: Clusting

    1. K-means algorithm 2. K-means optimization objective 3. Random initialization

  2. JAVA线程sleep和wait方法区别 代码

    package test; import java.util.Date; import java.util.Random; public class test { public static void ...

  3. (linux)LED子系统

    数据结构(/include/linux/leds.h) enum led_brightness { LED_OFF = 0, LED_HALF = 127, LED_FULL = 255, }; le ...

  4. csrf防范笔记

    1.验证Http的refer字段 http有一个refer字段,用以记录该http请求的来源地址 好处: 简单便捷,后台开发人员只需要设置一个拦截器 缺点: Referer 的值是由浏览器提供的,虽然 ...

  5. linux内核 RCU机制详解【转】

    本文转载自:https://blog.csdn.net/xabc3000/article/details/15335131 简介 RCU(Read-Copy Update)是数据同步的一种方式,在当前 ...

  6. matlab的调试

    MATLAB(1)——基本调试方法(Debug)           链接:http://www.cnblogs.com/xingshansi/articles/6477185.html 前言 之前经 ...

  7. listen 75

    Hot Jupiters Smarten Search For Other Earths Scientists are looking for Earth like planets around ot ...

  8. codeforces 703D D. Mishka and Interesting sum(树状数组)

    题目链接: D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megaby ...

  9. fscanf和fgets用法

    首先要对fscanf和fgets这两个文件函数的概念有深入的了解,对于字符串输入而言这两个函数有一个典型的区别是: fscanf读到空格或者回车时会把空格或回车转化为/(字符串结束符)而fgets函数 ...

  10. Loading 遮蔽层 简单实现。

    <!--背景div--><div id="bg" class="bg" style="display:none;text-align ...