ACM之数学
数论+组合数学+数学计算+计算几何
Dilly__dally
这个作者很懒,什么都没留下…
展开
-
组合数学之排列组合
一、排列与组合 //组合数C(n,k)ll C(ll n,ll k){ if(2*k>n) k=n-k; ll s=1; for(ll i=1,j=n; i<=k; i++,j--) s=s*j/i; return s;}//排列数A(n,r)ll A(ll n,ll r){ ll sum=1...原创 2018-08-27 21:51:33 · 445 阅读 · 0 评论 -
POJ 2249(组合数)
水题,这里注意计算的速度,方法不好可能会超时。#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<vector>#include<stack>#include原创 2018-08-27 16:13:00 · 309 阅读 · 0 评论 -
排列数和组合数
//组合数C(n,k)ll C(ll n,ll k){ if(2*k>n) k=n-k; ll s=1; for(ll i=1,j=n; i<=k; i++,j--) s=s*j/i; return s;}//排列数A(n,r)ll A(ll n,ll r){ ll sum=1; for(ll i =0;i&...原创 2018-08-27 16:24:42 · 606 阅读 · 0 评论 -
AtCoder 2286
题意:求N!的约数的个数以下部分内容转自:http://blog.csdn.net/ji414341055/article/details/5759157 先说基本定理:若正整数n可分解为p1^a1*p1^a2*...*pk^ak其中pi为两两不同的素数,ai为对应指数,则n的约数个数为(1+a1)*(1+a2)*....*(1+ak) 如180=2*2*3*3*5=2^2*3^2*5...转载 2018-05-22 18:42:57 · 151 阅读 · 0 评论 -
51Nod 2000 四边方形分割平面
思路:四边形每一个角形 的一个折线的每一个线段必须与之前每一个四边形的角形的两个边分别有一个交点 才能分割出最大数量的平面一个四边方形可以分2块,两个四边方形按照上面的思路可以分成8+2(最里面和最外面)块。第二个方形与第一个有8个交点,所以比一个方形的时候多8个区域,第三个正方形和第一第二个方形分别有8个,一共16个区域,所以 可以得到递推公式:an-an-1=8(n-1)#include<...原创 2018-05-23 15:15:38 · 257 阅读 · 0 评论 -
高斯消元模板
学习参考https://blog.csdn.net/pengwill97/article/details/77200372 浮点数: #define eps 1e − 9const int MAXN=220;double a[MAXN][MAXN],x[MAXN];//方程的左边的矩阵和等式右边的值, 求解之后 x存的就是结果int equ,var;//方程数和未知数个数/**...原创 2018-08-18 14:29:15 · 137 阅读 · 0 评论 -
POJ1222(高斯消元)
开关灯问题。第一种方法就是去枚举第一行的状态(6*5)* (2^6),很快。第二种方法是高斯消元,第一种的思路类似POJ 3279,下面说说高斯消元的思路:记g[i][j]为原矩阵,x[ i ] [ j ]为i,j位置是否按,1是按,0是不按,也就是要求的答案,a[ i ] [ j ]为增广矩阵,设c[ i ] [ j ]为按下(i,j)后的状态,比如按下(1,1),c数组为,为了更好...原创 2018-08-18 15:28:45 · 344 阅读 · 0 评论 -
poj 1730
思路:根据唯一分解定理拆成素数乘积,然后求每一个素数幂次的最大公约数即为p的值。注意x为负数的时候要先把最大公约数一直除以2直到其为奇数。...原创 2018-06-13 00:30:20 · 316 阅读 · 0 评论 -
POJ 2115
思路:构造模线性方程,然后用扩欧求解。方程:(x*c+a)%2^k=b 所以 x*c-y*2^k=b-a ,套ax+by=c,然后扩欧。注意:我开始写b=-2^k然后WA成狗,后来改成2^k AC了 。b没必要是负的,反正正负a和b的线性组合集都一样,况且此题不需要y。#include<cstdio>#include<cstring>#include<algori...原创 2018-06-13 19:56:10 · 171 阅读 · 0 评论 -
lightoj 1341
思路:唯一分解定理#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define ll long long#define fo freopen("in.txt","r",stdin)#define fc fclose(stdin)#define fu0(i,n) for(i=0;i<n;...原创 2018-06-12 20:57:58 · 278 阅读 · 1 评论 -
UVA 11582
思路:直接暴力肯定会超时,先用快速幂计算出a^b%n的值,因为mod为n时最多有n种余数,而且f[i]由前两项决定,所以周期至多为n*n,当f[i]==f[1]&&f[i-1]==f[0]时可以找到周期。注意:我在每一次进行时用memset初始化f数组结果TLE,去掉后就AC了。。#include<bits/stdc++.h>using namespace std;...原创 2018-06-14 09:45:06 · 437 阅读 · 0 评论 -
UVA 12169
思路: x3=(a(a*x1+b)%10001)+b)%10001a*b+b+y*10001=x3-a*a*x1对应a*x+b*y=c;a=(a+1),b=10001,c=x3-a*a*x1。枚举a的值,扩欧解不定方程解出x。判断该x是否满足整个序列。注意:该题要用long long,不然会运行不出结果。。#include<bits/stdc++.h>using namespace ...原创 2018-06-15 20:29:59 · 158 阅读 · 0 评论 -
UVA 10375 唯一分解定理
题意:求c(m,n)/c(r,s)思路:先对素数打表,构造阶乘的素数,设置一个e数组用来存储素数对应序号i的个数,阶乘作为分子是+1,作为分母是-1,最后计算的时候直接ans*=pow(素数,对应的个数)即可#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define ll long long#...原创 2018-07-09 01:25:52 · 102 阅读 · 0 评论 -
UVA 12716 gcd xor
有几个结论:(1)若 a xor b = c,则 a xor c = b。 (2)a - b <= a xor b,(a >= b) (3)若 gcd(a,b)= a xor b = c ,(a >= b),由(2)得:a - b <= c。 再令 a = k1×c,b = k2 × c,(k1 >...原创 2018-07-13 15:54:36 · 188 阅读 · 0 评论 -
UVA 10871 米勒测试或筛选试除法
题意:给出一个长度为n的正整数序列,一个素序列是一个长度至少为2的连续的子序列,总和是大于或等于2的一个素数。例如给出3 5 6 3 8,存在两个长度为2的素序列(5+6=11,3+8=11),输出最短的序列长度和元素。方法:米勒拉宾测试素数或者线性筛+试除法,然后枚举长度和首指针,计算j~j+i-1个整数的和(前缀和)#include<bits/stdc++.h>using nam...原创 2018-07-14 15:14:46 · 334 阅读 · 0 评论 -
SGU 106 扩展欧几里得
题意:求有多少对(x,y)满足x在x1~x2,y在y1~y2里使方程ax+by+c=0方法:c取相反数,然后扩欧解得x,y,再x*=c/d,y*=c/d求得一组解,计算x、y的改变量,x=b/d,y=a/d*-1。根据 x1<=x+k*dx<=x2,解得x1-x<=kdx<=x2-x,判断dx的正负再两边分别除以dx,左边向上取整,右边向下取整,对y进行一样的操作,最后取x...原创 2018-07-14 17:20:29 · 145 阅读 · 0 评论 -
POJ 1006 中国剩余定理
思路:设第x天高峰同时出现,则x≡p(mod23),x≡e(mod28),x≡i(mod33),根据中国剩余定理,求出乘法逆元,直接套公式求和就行了。注意:求和后要减去初始天数d,如果是小于等于0,则要加上m=23*28*33#include<cstdio>#include<cstring>#include<algorithm>#include<io...原创 2018-07-16 13:54:37 · 148 阅读 · 0 评论 -
POJ 2407 (欧拉函数)
直接套欧拉函数模板,链接:欧拉函数#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<vector>#include<stack>#include&l原创 2018-07-16 16:56:36 · 215 阅读 · 0 评论 -
阶和原根
参考大神https://blog.csdn.net/a27038/article/details/77203892原创 2018-07-16 17:33:31 · 348 阅读 · 0 评论 -
HDU 2588 (欧拉函数)
题意:求满足gcd(x,n)>=m的x的个数,其中,1<=x<=n思路:设s=gcd(x,n),s*a=x,s*b=n,所以a,b互质,所以b的欧拉函数就是a的个数。因为数据很大,所以s从1枚举到根号n,如果s>=m则ans+=phi(n/i),判断s*s是否等于n即如果是完全平方数的时候,只算一遍;如果不是完全平方数,为了计算根号n后面的s,比如6%2=0,则6%3也...原创 2018-07-17 17:55:07 · 273 阅读 · 1 评论 -
莫比乌斯反演学习(hdu 1695)
公式:1 2 (d|n表示n是d的倍数)莫比乌斯函数:例题:HDU1695题目大意是这样的,给你 a , b , c , d , k 五个值 (题目说明了 你可以认为 a=c=1) x 属于 [1,b] ,y属于[1,d] 让你求有多少对这样的 (x,y)满足gcd(x,y)==k。给你的时间是 3000 MS。 0 < a <= b...原创 2018-07-18 01:40:59 · 213 阅读 · 0 评论 -
莫比乌斯函数模板
const int MAXN = 1000000;bool check[MAXN+10];int prime[MAXN+10];int mu[MAXN+10];void Moblus(){ memset(check,false,sizeof(check)); mu[1] = 1; int tot = 0; for(int i = 2; i <= M...原创 2018-07-18 01:08:40 · 157 阅读 · 0 评论 -
奇偶数列法则
定理: 如a^2+b^2=c^2是直角三角形的三个整数边长,则必有如下a值的奇数列、偶数列关系成立; (一) 直角三角形a^2+b^2=c^2奇数列a法则: 若a表为2n+1型奇数(n=1、2、3 …), 则a为奇数列平方整数解的关系是: a=2n+1 { b= n^2+(n+1)^2-1 c= n^2+(n+1)^2 证:由勾股弦定理,若abc为直角三...原创 2018-08-26 16:39:49 · 1856 阅读 · 0 评论 -
HDU 6441(费马大定理+奇偶数列法)
思路:由费马大定理知a^n+b^n=c^n当n>2时无整数解,所以n==0和n>2时输出-1 -1,n==1时输出1,a+1,n==2时,由奇偶数列法(https://blog.csdn.net/Dilly__dally/article/details/82081922)知a为奇数时,b=n*n+(n+1)*(n+1)-1,c=b+1;a为偶数时,b=n*n,c=b+2 求解 ...原创 2018-08-26 16:42:03 · 369 阅读 · 0 评论 -
ACM数论之费马小定理
费马小定理(Fermat's little theorem)是数论中的一个重要定理,在1636年提出,其内容为: 假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p),例如:假如a是整数,p是质数,则a,p显然互质(即两者只有一个公约数1),那么我们可以得到费马小定理的一个特例,即当p为质数时候, a^(p-1)≡1(mod p)。...原创 2018-08-26 17:28:46 · 743 阅读 · 0 评论 -
HDU 6440(费马小定理)
m^p≡mmodp,n^p≡nmodp,所以m^p+n^p≡(m+n)modp#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define ll long longconst int maxn=200005;const double eps=1e-8;const double PI...原创 2018-08-26 17:47:34 · 166 阅读 · 0 评论