数论

数论superGCD 高精度GCD

匿名 (未验证) 提交于 2019-12-02 23:26:52
高精度GCD https://www.luogu.org/problemnew/show/P2152是一道模板题,因为不会phython,所以・・・只能老老实实写高精度。这里我们用到更相减损法求公约数。 看 首先,根据上面的步骤,分析他们是否是偶数,所以需要检查每个大数的最后一位;直到两个都是奇数,然后用大数减去小数,减去之后再重复之前的操作,然后把最后的数乘上若干个2就可以了; 分析操作过程,我们需要处理 高精度判断奇偶数 , 高精度乘2 , 高精度除2 , 高精度减法 这四个操作。 自己也是看了网上很多代码,然后照猫画虎,能改进的地方有很多。 高精度判断奇偶数 bool judge(const node &a) { return a.num[0]%2==0?//判断最后一位就好 } 高精度乘2 node mul2(node a) { int in=0; for(int i=0;i<a.len;i++) { a.num[i]=a.num[i]*2+in; in=0; if(a.num[i]>=10) { in=a.num[i]/10; a.num[i]%=10; if(i==a.len-1) a.len++; } } return a; } 高精度除2 node div2(node a) { for(int i=a.len-1;i>=1;i--)//这里是1,0的话会出现a

HDU - 1495 非常可乐【数论\】

匿名 (未验证) 提交于 2019-12-02 23:06:17
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 27959 Accepted Submission(s): 10843 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的次数,如果不能输出"NO"。 Input 三个整数 : S 可乐的体积 , N 和 M是两个杯子的容量,以"0 0 0"结束。 Output 如果能平分的话请输出最少要倒的次数,否则输出"NO"。 Sample Input 7 4 3 4 1 3 0 0 0 Sample Output NO 3 Author seeyou Source “2006校园文化活动月”之“校庆杯

数论四大定理

匿名 (未验证) 提交于 2019-12-02 22:56:40
1.威尔逊定理: 当且仅当p为素数时:( p -1 )! ≡ p-1 ( mod p ) 即若p为质数,则p能被(p-1)!+1整除 2.欧拉定理: 欧拉定理:也称费马-欧拉定理 若n,a为正整数,且n,a互质,即gcd(a,n) = 1,则a^φ(n) ≡ 1 (mod n) φ(n) 是欧拉函数: 如果n是质数,那么1到n-1所有数都是与n互质的,所以φ(n) = n-1 欧拉公式: e的ix次方 = cosx + isinx 把x用π带进去,变成 e的iπ次方= -1 3.孙子定理(中国剩余定理) 用现代数学的语言来说明的话,中国剩余定理给出了以下的一元线性同余方程组: 中国剩余定理说明:假设整数 m 1, m 2, ... , m n两两互质,则对任意的整数: a 1, a 2, ... , a n,方程组 (S)有解 4.费马小定理: 假如p是质数,若p不能整除a,则 a^(p-1) ≡1(mod p),若p能整除a,则a^(p-1) ≡0(mod p)。 或者说,若p是质数,且a,p互质,那么 a的(p-1)次方除以p的余数恒等于1 参考自: http://www.cnblogs.com/linyujun/p/5194142.html 文章来源: 数论四大定理

[笔记乱写]关于数论函数

有些话、适合烂在心里 提交于 2019-12-02 16:23:37
数论GPBH,所以开坑 常见的数论函数 莫比乌斯函数$\mu$ 1.定义: $\mu (1)=1$ 若$d$没有平方因子,$\mu (d) = (-1)^k$,$k$为$d$的质因数个数 否则$\mu (d)=0$ 2. 性质: 对于任意正整数$n$,有$\sum \limits_{d|n}\mu(d)=[n=1]$。 $\mu$为积性函数。 $\sum \limits _{d|n}\frac{\mu(d)}{d}=\frac{\phi(n)}{n}$ 欧拉函数$\varphi $ 1.定义: $\varphi (n)= \sum \limits _{i=1}^{n} [gcd(i,n)=1]$ 2.性质: $\sum \limits _{d|n} \varphi (d)=n$ $\varphi(n) = n * \prod (1 - \frac{1}{p_i})$ $a^{\varphi(m)} \equiv 1 \pmod {m}$ 对于$n=p^k$,有$\varphi(n) = (p - 1) * p^{k - 1}$ 积性函数 约数个数$d()$ 1.定义: RT 2.性质:积性函数 约数和$\sigma ()$ 1.定义: RT 2.性质:积性函数 元函数$\epsilon$ 1.定义: $\epsilon(n)=[n=1]$ 2.性质: 对于任意积性函数$f$,有$f

数论函数——莫比乌斯反演

可紊 提交于 2019-12-02 09:38:13
一些函数的一些性质 取整函数 \(\lfloor x \rfloor\) (一) \(\lfloor x \rfloor <= x < \lfloor x \rfloor +1\) (二)对任意x与正整数a,b \(\lfloor \lfloor \frac{x}{a} \rfloor /b\rfloor=\lfloor \frac{x}{ab}\rfloor\) (三)对于正整数n,1 -- n中d的倍数个数为 \(\lfloor \frac{n}{d} \rfloor\) (四)若n为正整数, \(\lfloor \frac{n}{d}\rfloor\) 不同取值个数不超过 \(2\times\sqrt{n}种\) 证明: \((1)若d \leq{\sqrt{n}},\lfloor \frac{n}{d}\rfloor只有不超过\sqrt{n}种\) \((2)若d>\sqrt{n},\lfloor \frac{n}{d} \rfloor \leq \frac{n}{d} \leq \sqrt{n},\lfloor \frac{n}{d}\rfloor 不超过\sqrt{n}种\) \(综上,\lfloor \frac{n}{d}\rfloor 不超过2\times{\sqrt{n}}种\) 调和数 定义 \[Hn=\sum\limits_{k=1}^{n}\frac{1}

数论 - 取模运算及其性质

橙三吉。 提交于 2019-12-02 06:58:12
在算法竞赛中经常会用到各式各样的取模运算,下面将常用的总结下来以便自己复习 什么是取模运算 在java和c/c++中 对于整型数a,b来说,取模运算: 1.求整数商: c = a/b; 2.计算模: a % b = a - c * b; 例子 : 9 % 4 = 9 - (9 / 4) * 4 = 1 9 %-4 = 9 - (9 /-4) -4 = 1 -9 % 4 = -9 - (-9 / 4) 4 =-1 -9 %-4 = -9 - (-9 /-4) *-4 =-1 在python中 a % b = a - n b,其中n为不超过a / b的最大整数 1.求商:c = a / b 2.取 n:n为不超过c的最大整数即[c] 3.计算模:a % b = a - n b 取模运算的性质 模运算与基本四则运算有些相似,但是除法例外。其规则如下: (a + b) % p = (a % p + b % p) % p (a - b) % p = (a % p - b % p) % p (a * b) % p = (a % p * b % p) % p a ^ b % p = ((a % p)^b) % p 结合律: ((a+b) % p + c) % p = (a + (b+c) % p) % p ((a b) % p c)% p = (a * (b c) % p) % p 交换律:

数论板子大总结

末鹿安然 提交于 2019-12-02 06:29:10
1.欧几里得求gcd int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } 2.扩展欧几里得求解线性方程 首先根据Bezout定理,对于任意的a,b:ax+by=gcd(a,b); 然后根据欧几里得求gcd的方法构成等价方程,在递归的同时求出x,y; void exgcd(int a,int b,int &x,int &y) { if(b==0){ x=1;y=0; return; } gcd(b,a%b,y,x); y-=a/b*x; } 另外一种写法:(不只是long long 的事情) void exgcd(long long a,long long b,long long& x,long long& y) { if(!b){ x=1;y=0; return; } exgcd(b,a%b,x,y); long long tmp=x; x=y; y=tmp-a/b*y; }    来源: https://www.cnblogs.com/kamimxr/p/11734489.html

A Simple Math Problem(hdu 5974 数论题

佐手、 提交于 2019-12-02 05:23:21
题目: http://acm.hdu.edu.cn/showproblem.php?pid=5974 已知:X+Y=a,lcm(X,Y)=b,给出a,b取值求解X,Y #include<bits/stdc++.h> using namespace std; #define ll long long ll gcd(ll n,ll m) { return m==0?n:gcd(m,n%m); } int main() { int i,j,t,n,m,a,b; while(~scanf("%d%d",&a,&b)) { ll g=gcd(a,b); ll A=a/g; ll B=b/g; ll deita=A*A-4*B; if(deita<0)cout<<"No Solution\n"; else { ll z1=(-A+sqrt(deita)); ll z2=(-A-sqrt(deita)); ll de=sqrt(deita); if(z1%-2==1||z2%-2==1||de*de!=deita)cout<<"No Solution\n";//非整数情况 else cout<<min(z1/(-2),z2/(-2))*g<<" "<<max(z1/(-2),z2/(-2))*g<<endl; }//因为都是整数解,不可能有负数解;所以两个解一个是p一个是q,再*g就是x,y了

数论简单题 组合数

梦想与她 提交于 2019-12-01 19:15:24
本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 题目: 数论简单题 (simple.cpp/in/out 1s 256M) 由于最终结果可能超过 int 的范围,因此请将运算结果对 1000000007 取模。 Input 第 1 行,一个整数 T ( T <= 200000 ),表示数据组数。 第 2 行至第 T+1 行,每行两个整数 m, n 。 0 < m <= n <= 2000 Output 共 T 行,每行输出一个整数,代表求和结果。 Sample Input 3 1 1 2 3 3 3 Sample Output 1 3 1 前一个数由后一个数累加而来 可以通过样例分析,是求组合数 组合意义: 循环变量构成一个递增的序列,因此只要在 n 个数中选出 m 个数,按从小到大的顺序依次分配给 m 个循环变量即可,组合数可用 DP 求杨辉三角 得。 由于 T 很大,需要进行预处理。 时间复杂度 O(nm) 。 code: 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 2020 4 #define ll long long 5 #define mod 1000000007 6 ll t,n,m; 7 ll c[N][N]; 8 int main() 9 { 10 c[1][0]=c[1][1