数论
=
uadsbkc
这个作者很懒,什么都没留下…
展开
-
快速幂--
问题在求an的时候,如果n很大,所花费的时间会很长,而且往往不需要得到这一个数(无法承载这么大的数值)取模运算(a * b) % p = (a % p * b % p) % p推广: (a * a * a) % p = (a % p * a % p * a % p ) % p就是说在计算时,每一步都取模,最后再取模 等同于先全部计算再取模但当p很大时,比如p=100000000,要进行100000001次取模操作,速度较慢更快的方案尽量在每一步都把指数变小310 = 3 * 3原创 2020-10-10 10:10:18 · 82 阅读 · 0 评论 -
数论
Ⅰ GCDgcd是指最大公约数(Greatest Common Divisor)18能被2整除,18是2的倍数,2是18的约数。记作(a,b)(1) 求法辗转相除法(欧几里得算法)求(319,377)319 / 377 = 0 (余319) —— (377,319)377 / 319 = 1 (余 58) —— (319,58)319 / 58 = 5 (余29) —— (58,29)58 / 29 = 2 (余0) ——原创 2020-11-01 08:10:02 · 381 阅读 · 1 评论 -
数据
数据类型的取值范围类型取值范围近似值int-231到231-1绝对值在109以内,大约10位unsigned int0到232大约10位long long-263到263-1绝对值在109~1018,大约19位double-21024到21024有效精度为小数点后15-16位【注意】 double是浮点数,可以用科学记数法(指数)表示,可以表示很大的范围,但是损失了精度,大概只有15~16位的有效位数BigInteger的基本用法java.原创 2020-10-17 21:09:15 · 97 阅读 · 1 评论 -
位运算bitset
概念程序中所有的数在内存中事宜二进制形式储存的,位运算就是对整数在内存中的二进制位进行操作运算符号① a & 1取二进制的最末位,0为偶数,1为奇数② a | 1 -1把a变为偶数③ a << 2表示a*2④ a >> 2表示a/2应用交换a,ba=a^b;b=a^b;a=a^b;...原创 2020-10-10 11:40:58 · 278 阅读 · 1 评论 -
素数筛--
目的快速的得到素数埃式筛①2是最小的素数,将表中所有是2的倍数删除②3成为最小的素数,将表中所有是3的倍数删除③以此类推相关代码#define maxn 10000000bool vis[maxn];int prime[maxn],x;void isprime(int n) //埃氏筛{ for(int i=2;i<=n;i++) { if(!vis[i]) prime[x++]=i; for(int j=2;j*i<=n原创 2020-10-10 11:25:59 · 79 阅读 · 0 评论