
数论
文章平均质量分 62
ijbuhv
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu1576 A/B 扩展欧几里得求逆元
//(a/b)%c ==> a%c = (b*k) %c; // k = (a*(b_1))%c ,b_1为b的逆元 #include #include #include using 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 · 785 阅读 · 0 评论 -
hdu4135Co-prime 容斥原理水题
//问一个区间[a,b]与n互素的数的个数 //利用容斥原理可知 //在[a,b] 区间内对n的素数因子 //ans = 被一个数整除的数的个数 - 被两个数的最小公倍数整除的数的个数 + 被三个数的。。。 #include #include #include using namespace std ; const int maxn = 100010 ; typedef __in原创 2015-06-08 18:08:48 · 1176 阅读 · 0 评论 -
hdu3364 Lanterns 高斯消元
//有m个开关,n个灯泡,每个开关可以控制不同的灯泡(可以有多个) //给定n个灯泡的亮暗情况,问有多少种开关的情况 //用a[i][j]表示第j个开关对第i个灯泡能否控制,1为能,0为否 //用高斯消元,ans = 2^(var-k) ,(var-k)为自由变量数 #include #include #include using namespace std ; const int原创 2015-06-09 19:09:26 · 714 阅读 · 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 #include usi原创 2015-08-30 19:38:17 · 560 阅读 · 0 评论 -
hdu5391Zball in Tina Town
//求(n-1)!%n //n 为合数,答案为0,n为素数 , 威尔逊定理可得 //判定一个自然数是否为素数的充分必要条件。即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p ) //答案为(n-1) 注意4的时候 #include #include #include using namespace std ; const int maxn = 1e5 +10 ; int le原创 2015-08-16 15:25:39 · 644 阅读 · 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 · 489 阅读 · 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 · 412 阅读 · 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 · 404 阅读 · 0 评论 -
hdu5514Frogs 容斥
//n只青蛙,每只青蛙每一步跳的步数为a[i] //从0点开始,在一个坐标为0...m-1的环中跳 //青蛙跳的次数没有限制 //问所有的青蛙中任意一只青蛙能够达到的所有的 //坐标之和 #include #include #include #include #include using namespace std ; const int maxn = 1e4+10 ; typedef long原创 2015-11-08 18:30:06 · 609 阅读 · 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 · 434 阅读 · 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 · 956 阅读 · 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 #include using namespace std ; const int mod = 10007 ;原创 2015-06-06 20:21:50 · 512 阅读 · 0 评论 -
poj1061 青蛙的约会 扩展欧几里得
//(x + km)%l == (y + kn)%l //s*l + k(m - n) = y - x //用扩展欧几里得求出k //注意一下k需要为最小正数 #include #include #include using namespace std ; typedef __int64 ll ; ll exgcd(ll a , ll b , ll &x , ll &y) {原创 2015-05-09 16:43:18 · 665 阅读 · 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 · 600 阅读 · 0 评论 -
hdu2588GCD
//给出n , m 求出小于n且与n的最大公因数大于m的个数 //枚举所有n的大于m的因数i为最大公因数 //那么就只需要求n/i的欧拉函数就行 #include #include #include using namespace std ; const int maxn = 100010 ; typedef __int64 ll ; ll f[maxn] ; ll get_f原创 2015-05-28 20:53:07 · 639 阅读 · 0 评论 -
hdu1286找新朋友 欧拉函数模板题
#include #include #include using 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 · 652 阅读 · 0 评论 -
hdu2824 The Euler function 筛选法求欧拉函数模板题
//求a , b范围内的所有的欧拉函数 //筛选法求欧拉函数模板题 #include #include #include using 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 · 711 阅读 · 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 · 930 阅读 · 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 · 854 阅读 · 0 评论 -
hdu1796 How many integers can you find
//给集合m,问小于n的数中有多少数能被集合m中任意一个数整除 //利用容斥原理可知 //ans = 被一个数整除的数的个数 - 被两个数的最小公倍数整除的数的个数 + 被三个数的。。。 #include #include #include using namespace std ; const int maxn = 110 ; typedef __int64 ll ; int原创 2015-06-02 18:34:50 · 586 阅读 · 0 评论 -
hdu2841Visible Trees 容斥原理
//给定一个n*m的方格,农场主从(0 , 0 )开始看 , 只能看到 //一条直线上的第一个格子,问农场主能看到几个格子 //对于任意的坐标(x,y) ,与其在同一条直线上的坐标有(k*x , k*y) //故而可以枚举所有的x,找其在(1,m)有多少个互质的数 #include #include #include #include using namespace std ;原创 2015-06-03 19:55:09 · 631 阅读 · 0 评论 -
hdu5597GTW likes function 欧拉函数
#include #include #include using 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 · 628 阅读 · 0 评论