摘要:
欧几里得算法(gcd) 就是辗转相除法 作用:求gcd(a,b) 公式: \(gcd(a,b) = gcd(b,a\%b)\) 写法1: int gcd(int a , int b ){ return !b ? a : gcd(b, a % b); } 写法2 :位运算(超快) (a,b不能为0) 阅读全文
摘要:
欧拉函数 大佬已经讲的很清楚了,证明非常清晰 互质: 两个数的最大公约数为 $1$ , 称这两个数互质 求一个数的欧拉函数: 利用公式 int phi(int n) { int ans = n; for (int i = 2; i <= n / i; i++) { if (n % i == 0) { 阅读全文
摘要:
前缀和 前缀和就是数组前 \(i\) 项之和,主要作用是能快速求出 区间和 下标 : $1$ $2$ $3$ $4$ $5$ \(a[5]\) : $2$ $4$ $3$ $5$ $8$ 前缀和数组: $2$ $6$ $9$ $14$ $22$ 为了便于计算,数组下标一般从 $1$ 开始,能得到 一 阅读全文
摘要:
//双链表 typedef struct DLNode{ int data; struct DLNode *prior; struct DLNode *next; }DLNode; //初始化 void InitList(DLNode *&L){ L = (DLNode*)malloc(sizeof 阅读全文
摘要:
//单链表 typedef struct LNode{ int data; struct LNode* next; }LNode; LNode L; //初始化 void InitList(LNode *&L){ L = (LNode*)malloc(sizeof(LNode)); L -> nex 阅读全文
摘要:
题目:P1835 素数密度 题目中区间的端点很大,但是区间的长度不长. 解题思路: 1.先用埃氏筛选掉 1 到 sqrt(R) 的合数 2.用第一步的素数表筛选掉 L 到 R 的合数 (一二步一起进行) 3.计算素数个数 代码: #include<bits/stdc++.h> using names 阅读全文
摘要:
基础知识 最大公约数: 最大公约数就是两个数的最大公共因子 x = abc , y = bcdef (a ~ f 均为质因子) 则 gcd ( x , y ) = bc 计算方法: 1.质因数分解法,如上举例所示 2.欧几里得算法(辗转相除法) 算法原理:gcd(a,b) = gcd( b , a 阅读全文
摘要:
基础知识 1.素数(质数): 素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。(prime number) 2.性质:(待填) 3.基本判断思路: 在一般领域,对正整数n,如果用2到 sqrt(n)之间的所有整数去除,均无法整除,则n为质数。 素数筛 1.暴力 按照基本判断思路 阅读全文
摘要:
1.找筷子 解题思路: 要找出唯一单着的那个数,可以用异或的方式 我们已知 a ^ a = 0 ,对于存在偶数个的数字,迟早会互相抵消,奇数个的数字也会两两抵消,只剩下最后一个答案。 AC代码: #include<iostream> #include<cstdio> #include<algorit 阅读全文