
数论
在路上Ven
每天学习真逍遥
展开
-
判断是否为2的幂
用二进制实现,偶然接触,还不错诶bool isPowerOfTwo(int n) { return (n > 0) && (!(n & (n - 1))); }原创 2019-05-26 18:29:29 · 4202 阅读 · 1 评论 -
快速排序
十大经典排序算法(动图演示)#include<iostream>using namespace std;void quick_sort(int a[],int left,int right) { int i=left,j=right; int basic=a[(left+right)/2]; while(i<=j) { //从左到右找到大于等于基准点的元素 ...原创 2020-03-29 16:47:02 · 166 阅读 · 0 评论 -
并查集(注释详细,超容易理解)
我写的这个版本绝对是超容易理解的,(起码是我看到过最好理解的... /手动狗头)有任何疑问欢迎留言#include<iostream>#define maxn 10000 using namespace std;int n,m;int cnt=0; //统计有几个集合 int f[maxn]; //记录每个人的上级 void init() { //初始化 ...原创 2019-07-25 21:10:41 · 487 阅读 · 0 评论 -
2019/7/16 扩展欧几里得、逆元、容斥
在说扩展欧几里得算法之前,首先回顾一下欧几里得算法int gcd() { return !b ? a : gcd(b,a%b);} //辗转相除法 gcd(a,b)=gcd(b,a%b)然后要了解一下裴蜀定理: 有解的充要条件是c为gcd(a,b)的整数倍。a,b(a>b>0)为已知量,x,y是未知量扩展欧几里得: 简单推导: 根据...原创 2019-07-23 17:29:46 · 263 阅读 · 0 评论 -
lower_bound( )和upper_bound( )的常见用法
lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的。在从小到大的排序数组中,lower_bound( begin,end,num): 从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下...原创 2019-06-09 14:39:26 · 1137 阅读 · 0 评论 -
枚举
简述顾名思义,枚举便是依次列举出所有可能产生的结果,根据题中的条件对所得的结 果进行逐一的判断,过滤掉那些不符合要求的,保留那些符合要求的,也可以称之为暴力算法。题意:给出一个数字n(n<=1000000)请你计算出除了1和n之外n的因子数的个数。要求:Time Limit: 1000MS ,Memory Limit:10240K思路:首先我们通过分析n的范围和时限(10...原创 2019-05-21 13:17:10 · 237 阅读 · 0 评论 -
卡特兰数 Catalan number
简介:卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名,其前几项为(从第零项开始) : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, ...原创 2019-09-06 18:49:44 · 732 阅读 · 0 评论 -
妙用 n&(n-1)位运算
1.计算二进制数中含有多少个1 原理:将n的二进制表示中的最低位为1的改为0代码:#include <iostream> #include <cstdio> using namespace std; int main() { int n, count = 0; cin>>n; while...原创 2019-08-30 12:42:53 · 727 阅读 · 0 评论 -
斯特林数
斯特林数: 在组合数学,Stirling数可指两类数,第一类Stirling数和第二类Stirling数,都是由18世纪数学家James Stirling提出的。后来哥本哈根(Copenhagen)大学的尼尔森(Niels Nielsen,1865-1931)提出了"Stirlingschen Zahlen erster Art" [第一类Stirling数]和"Stirlingsc...原创 2019-08-29 09:53:05 · 1002 阅读 · 0 评论 -
将一个数反向
将一个数反向 cin>>a; int m=0; while(a) { m=m*10+a%10; a/=10; }判断一个数为几位数int hhh(int a) { int n=1; while(a/10) {...原创 2019-08-22 15:59:27 · 928 阅读 · 0 评论 -
分数的四则运算
分数的表示: 最简洁的方法就是写成假分数的形式,即无论分子比分母大或者小,都保留为原数。Fraction——分数struct Fraction{ //分数 int up,down; //分子、分母}三项规则:1 、使down为非负数。如果分数为负,那么令分子up为负即可2 、如果该分数恰为零,那么规定分子为0,分母为13 、分子和分母除了1外没有...原创 2019-08-22 15:58:09 · 777 阅读 · 0 评论 -
快速幂算法推导(详解)
最近知识量太大,没精力去补之前的漏洞 (简直是女娲补天),今天早上终于可以抽空补一块天洞了嘿嘿嘿 今天就来说一下快速幂算法吧,因为欧拉降幂会用到这个算法。搜集了全网,发现大部分人都不清楚如何推导,把板子放在那里。几经搜索结合消化吸收,终于明白的差不多了,十分感谢此博客快速幂推导链接。分享一下,希望更多的人能明白这个结论的推导吧 传统的求幂算法:时间复杂度非常高(...原创 2019-08-16 11:00:08 · 1406 阅读 · 0 评论 -
快速幂算法
一般用于求解a^b%c时,可以大大降低时间复杂度 快速幂算法——可迅速求出a^b。其主要理论依据如下: 1,当b为偶数时,a^b可以转为a^2的b/2次方。 2,当b为奇数时,a^b可以转为a^2的b/2次方,再乘以a。模板一:int pow4(int a,int b){ int r=1,base=a; ...原创 2019-05-26 15:03:56 · 172 阅读 · 0 评论 -
莫比乌斯反演、中国剩余定理题目总结
所有题目链接B题需要了解的公式: μ(i)可通过莫比乌斯反演模板所求,需要注意若输入的k不等于1,即gcd(i,j) = k,等同于gcd(i/k,j/k) = 1。接下来问题就变得简单了,只需要注意(1,2)和(2,1)是等价的,所以需要排除。则如图 先定义一个ans算全部的对数,然后再用短边算ans2的对数/2,ans-ans2即所得答案#include<iostre...原创 2019-07-20 09:16:50 · 262 阅读 · 0 评论 -
FZU - 1759 Super A^B mod C
欧拉降幂的结论,有关欧拉算法的总结: https://blog.youkuaiyun.com/Ven21959/article/details/96159829有关快速幂的总结: https://blog.youkuaiyun.com/Ven21959/article/details/99671654例题(欧拉+快速幂):FZU - 1759Given A,B,C, You shou...原创 2019-08-16 13:01:25 · 191 阅读 · 0 评论 -
素数筛,欧拉算法题目总结
所有题目链接D题 先补一道简单的题,观察规律发现结果是小于等于所给数字n的每一项欧拉和。方法一:#include<iostream>#define Max 1000010using namespace std; int phi[Max]; void getphi() { phi[1] = 1; for(int i = 1; i &...原创 2019-07-18 10:45:01 · 477 阅读 · 3 评论 -
素数筛,欧拉算法知识点总结
唯一分解定理:任一大于1的自然数,要么本身是质数,要么可以分解为几个质数之积,且这种分解是唯一的。 即对于任一个正整数X(除了1)都有这样一个式子: p是素因子,a是素因子的个数 素数判断,根号n快速判断,我就不多说了素数筛法:朴素筛法 (复杂度nlog(n)):int prim[maxn],cnt = 0; //存放素数并计数bool flag[ma...原创 2019-07-16 18:02:32 · 572 阅读 · 0 评论 -
归并排序求逆序对
O( nlog(n) )/*归并排序: 1.[L,R] ——> [L,mid][mid+1,R] 2.递归排序 [L,mid][mid+1,R] 3.归并,讲左右两个有序序列合成一个有序序列 解题思路: 1.左半边内部的逆序对数量:merge_sort(L,mid) 2.右半边内部的逆序对数量:merge_sort(mid+1,R) 3.右边比左边大的 S...原创 2020-03-23 20:00:07 · 195 阅读 · 0 评论 -
乘法逆元
#include<iostream>#include<stdio.h>using namespace std;typedef long long ll;const int N = 3000010; ll inv[N];//扩欧 //void ex_gcd(ll a,ll b,ll &x,ll &y,ll &d) {// if(...原创 2020-02-22 16:51:12 · 253 阅读 · 0 评论 -
矩阵快速幂(模板)
P3390#include<iostream>#include<cstring>#define ll long longusing namespace std;const int N=105;const int mod = 1e9+7;int n;struct Matrix{ ll matrix[N][N];};void init(Matrix ...原创 2020-01-15 16:34:15 · 197 阅读 · 0 评论 -
高斯消元法(模板)
#include<cstdio>#include<cmath>const double EPS=1E-8;double B[110][110];int n;int main(){ scanf("%d",&n); for (int i=0;i<n;i++){ for (int j=0;j<n;j++) ...原创 2020-01-16 13:45:44 · 247 阅读 · 0 评论