数论
ijbuhv
这个作者很懒,什么都没留下…
展开
-
hdu1576 A/B 扩展欧几里得求逆元
//(a/b)%c ==> a%c = (b*k) %c;// k = (a*(b_1))%c ,b_1为b的逆元#include#include#includeusing namespace std ;const int mod = 9973 ;typedef __int64 ll;int exgcd(int a ,int b , ll &x ,ll &y){原创 2015-05-09 14:59:14 · 746 阅读 · 0 评论 -
hdu4135Co-prime 容斥原理水题
//问一个区间[a,b]与n互素的数的个数//利用容斥原理可知//在[a,b] 区间内对n的素数因子//ans = 被一个数整除的数的个数 - 被两个数的最小公倍数整除的数的个数 + 被三个数的。。。#include#include#includeusing namespace std ;const int maxn = 100010 ;typedef __in原创 2015-06-08 18:08:48 · 1142 阅读 · 0 评论 -
hdu3364 Lanterns 高斯消元
//有m个开关,n个灯泡,每个开关可以控制不同的灯泡(可以有多个)//给定n个灯泡的亮暗情况,问有多少种开关的情况//用a[i][j]表示第j个开关对第i个灯泡能否控制,1为能,0为否//用高斯消元,ans = 2^(var-k) ,(var-k)为自由变量数#include#include#includeusing namespace std ;const int原创 2015-06-09 19:09:26 · 672 阅读 · 0 评论 -
hdu5407CRB and Candies 求逆元
//求LCM(C(n,0),C(n,1),C(n,2),...,C(n,n))//令an=LCM(C(n,0),C(n,1),C(n,2),...,C(n,n))//b[n]=LCM(1,2,3,...,n)//a[n]=(b[n]+1)/n+1//if (n=p^k)bn=p*(b[n−1]) else b[n]=b[n−1]#include#include#includeusi原创 2015-08-30 19:38:17 · 536 阅读 · 0 评论 -
hdu5391Zball in Tina Town
//求(n-1)!%n//n 为合数,答案为0,n为素数 , 威尔逊定理可得//判定一个自然数是否为素数的充分必要条件。即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p )//答案为(n-1) 注意4的时候#include#include#includeusing namespace std ;const int maxn = 1e5 +10 ;int le原创 2015-08-16 15:25:39 · 601 阅读 · 0 评论 -
hdu4549M斐波那契数列 矩阵快速幂 + 费马小定理
//f[0] = a ;//f[1] = b ;//f[n] = f[n-1]*f[n-2] n>=2//给a , b , n //求f[n]//可以很容易得到//f[n] = a^(F[n-1])*b^(F[n-2]) n>=2//用矩阵快速幂很容易求F[n]//注意F[n]会很大//所以可以根据费马小定理可以在求的时候F[n]%=(mod-1)#include#incl原创 2015-09-03 21:57:25 · 442 阅读 · 0 评论 -
hdu4869Turn the pokers 组合数学+求逆元
//m个卡片 , n次操作 , 每次操作可以将xi张卡片反转//问最后有多少卡片的情况//对于最后卡片的情况 , 1的数目个数的奇偶性肯定和奇数xi的个数的奇偶性一样//因为奇数xi可以将1的个数加上奇数或者减去奇数 //而且这个1的数目区间一定是连续的[st,en]//那么就是维护st 和 en//对于st是有1就翻1//en是有0就翻0#include#include#in原创 2015-09-06 16:03:55 · 366 阅读 · 0 评论 -
hdu5478Can you find it
//求出所有(a^(k1*n+b1)+b^(k2*n-k2+1))%c == 0 的a,b//对于所有的n都成立//n = 1时(a^(k1+b1) + b)%c//枚举i找出对应的b//感觉应该有循环节//对于每一对成立的(a,b)找出对应的循环节//然后就过了#include<cstdio>#include<cstring>#include<iostream>#include原创 2015-09-27 18:49:35 · 375 阅读 · 0 评论 -
hdu5514Frogs 容斥
//n只青蛙,每只青蛙每一步跳的步数为a[i]//从0点开始,在一个坐标为0...m-1的环中跳//青蛙跳的次数没有限制//问所有的青蛙中任意一只青蛙能够达到的所有的//坐标之和#include#include#include#include#includeusing namespace std ;const int maxn = 1e4+10 ;typedef long原创 2015-11-08 18:30:06 · 576 阅读 · 0 评论 -
hdu5072Coprime
//给出n个数,问这n个数中,有多少//组a , b , c//gcd(a,b) = 1 , gcd(a,c) = 1 , gcd(b , c) = 1//或者gcd(a , b)!= 1 , gcd(a , c) != 1 , gcd(b , c) != 1//问有多少满足上述条件的组//可以构造一个图,对于两个数,互质连红边,不互质连蓝边//这个问题就变成这个图中的同色三角形的个数原创 2015-10-12 22:37:42 · 387 阅读 · 0 评论 -
hdu4059The Boss on Mars 容斥原理
//求1到n之间与n互质的数的四次方的和//segma(n^4) = (6n^5+15n^4+10n^3-n)/30//对于(a/b)%mod可以转化为(a*inv(b))%mod//inv(b)为b的逆元//由费马小定理a^(p-1) = 1(modp) a , p 互质可得//30的逆元为30^(mod-2)//由容斥原理很容易得到与n不互质的数之和为//对于所有的原创 2015-06-06 22:28:38 · 908 阅读 · 0 评论 -
hdu5212Code 容斥原理
//给一个数列a求segma(gcd(ai , aj)*(gcd(ai,aj) - 1))//运用容斥原理,对于以x为倍数的数的个数为k//那么以k为最大公约数的个数为f[x] = k^2 - f[2*x] - f[3*x] .....#include#include#includeusing namespace std ;const int mod = 10007 ;原创 2015-06-06 20:21:50 · 477 阅读 · 0 评论 -
poj1061 青蛙的约会 扩展欧几里得
//(x + km)%l == (y + kn)%l//s*l + k(m - n) = y - x//用扩展欧几里得求出k//注意一下k需要为最小正数#include#include#includeusing namespace std ;typedef __int64 ll ;ll exgcd(ll a , ll b , ll &x , ll &y){原创 2015-05-09 16:43:18 · 636 阅读 · 0 评论 -
hdu3501 Calculation 2 欧拉函数
//求小于n且和n不互质的所有数之和//若gcd(n , i) == 1 那么 gcd(n , n-i) == 1//可以用反证法//设gcd(n , n-i) != 1;//那么可以有 n = k1*a//n - i = k2*a ;//i = (k1-k2)*a //gcd(n ,i) != 1//那么 ans = n*(n-1)/2 - n*euler(n)/原创 2015-05-28 22:11:55 · 562 阅读 · 0 评论 -
hdu2588GCD
//给出n , m 求出小于n且与n的最大公因数大于m的个数//枚举所有n的大于m的因数i为最大公因数//那么就只需要求n/i的欧拉函数就行#include#include#includeusing namespace std ;const int maxn = 100010 ;typedef __int64 ll ;ll f[maxn] ;ll get_f原创 2015-05-28 20:53:07 · 597 阅读 · 0 评论 -
hdu1286找新朋友 欧拉函数模板题
#include#include#includeusing namespace std ;int Euler(int n){ int rea = n ; for(int i = 2;i*i { if(n%i == 0) rea -= rea/i ; while(n%i == 0)原创 2015-05-28 19:22:21 · 617 阅读 · 0 评论 -
hdu2824 The Euler function 筛选法求欧拉函数模板题
//求a , b范围内的所有的欧拉函数//筛选法求欧拉函数模板题#include#include#includeusing namespace std ;const int maxn = 3000010 ;typedef __int64 ll ;int e[maxn] ;int a , b ;void Euler(){ int i,j;原创 2015-05-29 18:39:24 · 664 阅读 · 0 评论 -
hdu3388Coprime 二分+容斥原理
//找第k个和n,m互质的数//由容斥原理可得//在[1,x]范围内且与n不互质的数的个数为://对于所有的n的素数因子:和一个素数因子不互质的个数-两个素数因子相乘的个数+三个素数因子相乘的个数-.....//对于x越大,在[1 , x]范围内的与n,m互质的数越多,所以存在单调性,可以用二分找到刚好有k个数和n,m互质#include#include#include原创 2015-06-02 20:19:05 · 886 阅读 · 0 评论 -
hdu1685 GCD 容斥原理
//数x小于等于b大于0的任意一个数,数y为小于等于d大于0的任意一个//问有多少对x,y使得gcd(x,y) = k ;//且(x,y),(y,x)算一对//可以转化为[1, b/k]中的x , 和 [1,d/k]中的y,//使得gcd(x,y) = 1 //可以枚举x , 在[1,d/k] 的范围内找大于x,且与x互质的数有多少个//记录所有x的素数因子//容斥原理原创 2015-06-01 21:37:06 · 809 阅读 · 0 评论 -
hdu1796 How many integers can you find
//给集合m,问小于n的数中有多少数能被集合m中任意一个数整除//利用容斥原理可知//ans = 被一个数整除的数的个数 - 被两个数的最小公倍数整除的数的个数 + 被三个数的。。。#include#include#includeusing namespace std ;const int maxn = 110 ;typedef __int64 ll ;int原创 2015-06-02 18:34:50 · 554 阅读 · 0 评论 -
hdu2841Visible Trees 容斥原理
//给定一个n*m的方格,农场主从(0 , 0 )开始看 , 只能看到//一条直线上的第一个格子,问农场主能看到几个格子//对于任意的坐标(x,y) ,与其在同一条直线上的坐标有(k*x , k*y)//故而可以枚举所有的x,找其在(1,m)有多少个互质的数#include#include#include#includeusing namespace std ;原创 2015-06-03 19:55:09 · 588 阅读 · 0 评论 -
hdu5597GTW likes function 欧拉函数
#include#include#includeusing namespace std ;typedef long long ll ;ll Euler(ll n){ ll rea = n ; for(ll i = 2;i*i <= n;i++) { if(n%i == 0) rea -= rea/i ; while原创 2015-12-12 21:45:10 · 591 阅读 · 0 评论