zoukankan      html  css  js  c++  java
  • BZOJ3930 [CQOI2015]选数 【容斥】

    题目

    我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案。小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一步研究。然而他很快发现工作量太大了,于是向你寻求帮助。你的任务很简单,小z会告诉你一个整数K,你需要回答他最大公约数刚好为K的选取方案有多少个。由于方案数较大,你只需要输出其除以1000000007的余数即可。

    输入格式

    输入一行,包含4个空格分开的正整数,依次为N,K,L和H。

    输出格式

    输出一个整数,为所求方案数。

    输入样例

    2 2 2 4

    输出样例

    3

    提示

    样例解释

    所有可能的选择方案:(2, 2), (2, 3), (2, 4), (3, 2), (3, 3), (3, 4), (4, 2), (4, 3), (4, 4)

    其中最大公约数等于2的只有3组:(2, 2), (2, 4), (4, 2)

    对于100%的数据,1≤N,K≤10^9,1≤L≤H≤10^9,H-L≤10^5

    题解

    问题转化:

    从区间[L,H]中选出N个数,使得gcd为K

    由于gcd为K,选出的数一定是K的倍数,令区间内所有的K的倍数除去K后,最小为L,最大为H,则问题转化为

    从区间[L,H]中选出N个数,使得gcd为1,即互质

    两个数互质的方案数除了用莫比乌斯反演之外,还有一种容斥(O(nlogn))的方法
    同样可以搬到这题多个数互质上来
    我们令(f[i])表示gcd为i的方案数【不包括全选同一个数,这个单独讨论】
    如果区间内有(x)(i)的倍数,则粗略估计(f[i] = x^N - x)
    我们会发现这样算会大了,因为我们同样包括了(f[2*i])(f[3*i]).......
    减去即可

    可以证明,N以内枚举所有数的倍数复杂度是(O(nlogn))
    这样我们就可以(O(nlogn))计算出(f[1])
    等等,还没完,如果(L=1),说明全选L时gcd为1,也要考虑,此时(ans+1)即可

    #include<cstdio>
    #define LL long long int
    const int P = 1000000007;
    int N,K,L,H,f[100002];
    int qpow(int a,int b){
    	int ans = 1;
    	for (; b; b >>= 1,a = (LL)a * a % P)
    		if (b & 1) ans = (LL)ans * a % P;
    	return ans % P;
    }
    int main(){
    	scanf("%d%d%d%d",&N,&K,&L,&H);
    	L = L % K ? L / K + 1 : L / K;
    	H /= K;
    	int len = H - L + 1;
    	for (int i = len; i; i--){
    		int x = H / i - (L - 1) / i;
    		f[i] = (qpow(x,N) - x) % P;
    		for (int j = i + i; j <= len; j += i) f[i] = (f[i] - f[j]) % P;
    	}
    	printf("%d
    ",((f[1] + (L == 1)) % P + P) % P);
    	return 0;
    }
    
    
  • 相关阅读:
    how to pass a Javabean to server In Model2 architecture.
    What is the Web Appliation Archive, abbreviation is "WAR"
    Understaning Javascript OO
    Genetic Fraud
    poj 3211 Washing Clothes
    poj 2385 Apple Catching
    Magic Star
    关于memset的用法几点
    c++ 函数
    zoj 2972 Hurdles of 110m
  • 原文地址:https://www.cnblogs.com/Mychael/p/8469275.html
Copyright © 2011-2022 走看看