数学
GoLakerswxy
这个作者很懒,什么都没留下…
展开
-
生成正态分布(高斯分布)的随机数
double generateGaussianNoise(double mu, double sigma){ const double epsilon = std::numeric_limits<double>::min(); const double two_pi = 2.0*3.14159265358979323846; static double z0, z1; static bool generate; generate = !generat.转载 2020-06-24 10:07:59 · 1536 阅读 · 0 评论 -
HDU-6390 GuGuFishtion(莫比乌斯反演)
题目: 给出n,m,p求思路:phi(a)=a*(1-1/p1)*(1-1/p2)*.....*(1-1/pn) pi是a的素因子;phi(a*b)=a*b*(1-1/p1)*(1-1/p2)*.....*(1-1/pm)里面包含了a和b的所有素因子(去重后的)。phi(a*b) / (phi(a)*phi(b)) 约分后的结果就是1/[ (1-1/p1)*(1-1/p2)*....原创 2018-08-13 18:56:34 · 361 阅读 · 0 评论 -
牛客网多校9 Circulant Matrix (FWT)
题目:给你一个a数组和b数组,构造出A[i][j]矩阵(A[i][j] = a[i xor j]),解x数组。n等于4的时候有:A[0][0]*x[0] + A[0][1]*x[1] + A[0][2]*x[2] + A[0][3]*x[3] = b[0] (mod p)A[1][0]*x[0] + A[1][1]*x[1] + A[1][2]*x[2] + A[1][3]*x[3] = b...原创 2018-08-16 20:48:19 · 324 阅读 · 0 评论 -
FWT模板
FWT可以对于两个数组a和b,求出他们的位运算卷积c,使得c[k]=sigma a[i]*b[j] (k==i 位运算 j)int rev=mod+1>>1;void FWT(int a[],int n) { for(int d=1;d<n;d<<=1) for(int m=d<<1,i=0;i&l...原创 2018-08-16 20:55:23 · 268 阅读 · 0 评论 -
bzoj 4589 Hard Nim(FWT)
DescriptionClaris和NanoApe在玩石子游戏,他们有n堆石子,规则如下:1. Claris和NanoApe两个人轮流拿石子,Claris先拿。2. 每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜。不同的初始局面,决定了最终的获胜者,有些局面下先拿的Claris会赢,其余的局面Claris会负。Claris很好奇,如果这n堆石子满...原创 2018-08-16 21:32:38 · 200 阅读 · 0 评论 -
51nod 1040 求1-n这n个数,同n的最大公约数的和(欧拉函数)
题目:给出一个n,求1-n这n个数,同n的最大公约数的和。比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15思路:一个数与n的最大公约数肯定是n的因子中的一个,所以只需要枚举n的每一个因子x,然后看有多少个满足条件gcd(k,n)==x即gcd(k/x,n/x)==1的k就可以了,求这个可以用欧拉函数#incl...原创 2018-08-26 22:04:33 · 1151 阅读 · 1 评论 -
bzoj 4555 [Tjoi2016&Heoi2016]求和 (NTT)
Description在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心。现在他想计算这样一个函数的值:S(i, j)表示第二类斯特林数,递推公式为:S(i, j) = j ∗ S(i − 1, j) + S(i − 1, j − 1), 1 <= j <= i − 1。边界条件为:S(i, i) = 1(0 <= i), S(i, 0) = 0(1...原创 2018-08-17 16:18:40 · 198 阅读 · 0 评论 -
HDU - 5868 Different Circle Permutation (Polya定理+欧拉函数优化+矩阵快速幂)
题目:就是n个点围成一个圈,每个人都可染成黑或者白,任意相邻的两个人不可以染成黑色,并且循环同构,问染色的方案数。思路:polya计数,先算一下得到长度为 k 的方案数,可以发现(我没发现) :f(1) = 1, f(2) = 3, f(3) = 4, f(4) = 7,是斐波那契数列,考虑矩阵快速幂来算,然后由于n非常大需要优化,k 作为gcd贡献的数量就是eular(n/k),用欧拉函数...原创 2018-08-31 22:12:17 · 235 阅读 · 0 评论 -
POJ-2888 Magic Bracelet (polya定理+dp矩阵快速幂)
题目:用m种颜色给长度为n的项链染色,其中k对颜色不能相邻,旋转相同看作同一种方案,问方案数,结果模9973 。思路:对于一段上的方案数是,dp[i][j]=sigma(dp[i-1][k]) (j与k可以相邻);长度非常大的时候这是做不了的,看到这个形式就可以考虑一下矩阵快速幂了。然后应用polya计数。#include<cstdio>#include<cstrin...原创 2018-09-07 19:12:52 · 280 阅读 · 0 评论 -
HDU 3089 Josephus again(约瑟夫环,加速优化)
题目:有N个人,编号为1~N,按顺时针围成一个圈,每数m个人,就将这个人从圈中消除。(N<=1e12)思路:f(1)=0;f(i)=[f(i-1)+m]%i 这里n非常大。1:当m=1的时候接就是最后的那个人了2: f(i-1)+m<i 满足条件时,算一下可以跳多少次还在满足条件下,即 f(i-1)+m*num<i-1+num 求满足条件的最大num如果加上起始...原创 2018-09-05 17:45:03 · 462 阅读 · 0 评论 -
poj2154 & 2409 (polya计数)
poj2154:用n种颜色涂环形的n个珠子,重复只考虑旋转,不考虑翻转,问能构成多少种?(n<=1e9)自己写的有点丑就用别人推理的截图了#include<cstdio>#include<cstring>using namespace std;const int MAXN=1000010;int prime[MAXN+5];void getP...原创 2018-09-03 21:31:33 · 203 阅读 · 0 评论 -
母函数
母函数,又称生成函数,是ACM竞赛中经常使用的一种解题算法,常用来解决组合方面的题目。母函数通常解决类似如下的问题:给5张1元,4张2元,3张5元,要得到15元,有多少种组合?某些时候会规定至少使用3张1元、1张2元、0张5元。某些时候会规定有无数张1元、2元、5元。解题时,首先要写出表达式,通常是多项的乘积,每项由多个x^y组成。如(1+x+x^2)(1+x^4+x^8)(x...原创 2018-08-08 10:42:33 · 222 阅读 · 0 评论 -
hdu 6363 bookshelf(莫比乌斯反演)
题目:把N本书放到K层的书架上,每一层的美丽值为bi=2*fib[cnt]−1,其中cnt是这一层书的数量,fib[ ]为斐波那契数列,整个书架的美丽值为gcd(b1,b2,...,bk),问整个书架的美丽值的期望。看了某大佬博客上详细的分析才补上的这个题,写的太好了。#include<bits/stdc++.h>using namespace std;typedef l...原创 2018-08-14 19:31:42 · 209 阅读 · 0 评论 -
Miller_Rabin素数测试[Fermat小定理][二次探测定理][同余式][Wilson定理]
同余式同余式的定义如果两个正整数a和b之差能被n整除,我们就说a和b对模n同余,记作 a ≡ b (mod n)同余式的运算+ - * 均可, / 的时候注意:若c与n互质,则有 a / c ≡ b / c ( mod n )简单解释: 如果ac≡bc(mod m),且c和m互质,则a≡b(mod m) (就是说同余式两边可以同时除以一个和模数互质的数)。证明:条件告诉我们,ac-mp = bc-...转载 2018-07-13 21:09:07 · 265 阅读 · 0 评论 -
Gym/100753 Divisions (大数分解质因数)
题目链接:https://nanti.jisuanke.com/t/28395 题意:给出一个数N(<1e18)输出因子的个数 #include <bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 100001;LL mul(LL a,LL b,LL mod) { if(...转载 2018-07-13 21:40:03 · 3066 阅读 · 0 评论 -
牛客网多校1 Monotonic Matrix (L-G-V Lemma应用两侧,行列式)
题目:在所有的n*m的矩阵中,数出满足条件的矩阵的数量(% 1e9+7)* Ai, j ∈ {0, 1, 2} for all 1 ≤ i ≤ n, 1 ≤ j ≤ m.* Ai, j ≤ Ai + 1, j for all 1 ≤ i < n, 1 ≤ j ≤ m.* Ai, j ≤ Ai, j + 1 for all 1 ≤ i ≤ n, 1 ≤ j < m.考虑到01和...原创 2018-07-20 13:07:01 · 549 阅读 · 0 评论 -
codeforces 1008D Pave the Parallelepiped(数学,处理因子)
题目链接a,b,c分别是A,B,C的因数,但a,b,c可能会有重复的排列出现,所以需要删掉#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5;int t,a,b,c,nu[maxn+10],num[maxn+10];int gcd(int a,int b){...原创 2018-07-14 19:59:00 · 525 阅读 · 0 评论 -
牛客网多校1 Sum of Maximum(数学,求Σi^k)
题目:对n个最大值排序,然后枚举最大值在相邻两个边界之间的区间上的贡献,求和。当时式子都推出来了,但是不会求1^k+2^k+3^k+....+n^k,刚找到一个板子。const int maxn=2005,mod=1e9+7;typedef long long ll;int b[maxn],c[maxn][maxn],inv[maxn],ans,tmp;ll calc(ll n,int...原创 2018-07-20 15:37:17 · 548 阅读 · 0 评论 -
数论基础模板
一部分是直接copy别人的,主要是为了之后方便用。#include <bits/stdc++.h>using namespace std;typedef long long ll;///素数筛选const int MAXN=1000010;int prime[MAXN+5];void getPrime(){ memset(prime,0,sizeof(p...原创 2018-07-29 14:38:02 · 232 阅读 · 0 评论 -
FZU - 1759 Super A^B mod C(欧拉降幂)
B的长度是1e6,所以需要欧拉降幂,利用 A^B %C ==A^( B%phi(C)+phi(C) ) %C不加输入挂会T,加上直接93ms。。。#include<cstdio>#include<cstring>using namespace std;typedef long long ll;template <class T>inline ...原创 2018-07-29 16:02:53 · 195 阅读 · 0 评论 -
HDU 2837 Calculation(欧拉降幂)
题目:f(0) = 1 and 0^0=1。f(n) = (n%10)^f(n/10) for all n >0. Please calculate f(n)%m. (2 ≤ n , m ≤ 10^9).与上一题类似,都是降幂的,这个题需要递归。。#include<bits/stdc++.h>using namespace std;#define ll long ...原创 2018-07-29 16:51:43 · 246 阅读 · 0 评论 -
51nod 1028 大数乘法 V2(FFT入门题)
题目:给出2个大整数A,B,计算A*B的结果。(A,B的长度 <= 100000,A,B >= 0)不会FFT。。用这个题看一遍代码#include<bits/stdc++.h>using namespace std;const double PI=acos(-1.0);struct Complex{ double x,y; Complex(...原创 2018-08-10 13:04:32 · 236 阅读 · 0 评论 -
HDU-4609 3-idiots(卷积 FFT)
题目:给n条线段。问随机取三个,可以组成三角形的概率。思路:求有多少种取法能构成三角形,再除以C(n,3)。卷积求出两条边构成的一个长度的方案数,然后拿第三条边来寻找总的方案数。用fft来求卷积。然后进行下面的处理,加和and去重for(int i=1;i<=n;i++) sum[a[i]+a[i]]--;//把自己配自己的去掉for(int i=1;i<=len;...原创 2018-08-11 10:45:48 · 231 阅读 · 0 评论 -
HDU-6304 Chiaki Sequence Revisited(找规律)
题目:求数列的前n项和。每个数出现的次数是log(lowbit(i))+1次,可以二分出a[n]的值,对于同样的次数会构成了一个等差数列。公差就是2^i,项数是n/2^i.太菜了自己打表没弄出来,参考了https://blog.csdn.net/purple_bro/article/details/81177315写的好详细。#include<bits/stdc++.h>...原创 2018-07-24 20:30:28 · 295 阅读 · 0 评论