zoukankan      html  css  js  c++  java
  • CF757E

    CF757E Bash Plays with Functions

    (f_r(n):)

    (r=0)(p*q=n)(gcd(p,q)=1)的有序对((p,q))个数

    (rge1)(f_r(n)=largesumlimits_{u*v=n}frac{f_{r-1}(u)+f_{r-1}(v)}2)

    (r=0)

    因为(a*b=n)(gcd(a,b)=1)(a)(b)平分了(n)的所有质因子

    (large p_i^{k_i})分成两份,方案数为(2^{w(n)})(w(n))(n)的质因子个数,(f_0(n)=2^{w(n)})

    显然(f_0)为积性函数

    (rge1)

    变一个式子(large f_r(n)=sumlimits_{d|n}frac{f_{r-1}(d)+f_{r-1}(frac nd)}2)(d)(largefrac nd)对称的

    把分母(2)打掉,(f_r(n)=largesumlimits_{d|n}f_{r-1}(d))

    这是个狄利克雷卷积式子,(f_r=f_{r-1}×1) (f_r)是积性函数

    (f_r(n)=prod f_r(p^{k_i}))

    const int N = 1e6 + 5,K = 20,mod = 1e9 + 7;
    int dp[N][K],sum[K] = {1},low[N];
    void getprime(){
    	for(int i = 2;i < N;++i)
    		if(!low[i])
    			for(int j = i;j < N;j += i) low[j] = i;
    }
    void init(){
    	getprime();
    	for(int i = 0;i < N;++i) dp[i][0] = 1;
    	for(int i = 1;i < K;++i)
    		dp[0][i] = 2,sum[i] = sum[i-1] + dp[0][i];
    	for(int i = 1;i < N;++i)
    		for(int j = 1;j < K;++j){
    			dp[i][j] = sum[j]; sum[j] = (sum[j - 1] + dp[i][j]) % mod;
    		}
    }
    ll ans = 1;
    int main(){
    	init(); int Q,r,n; Q = read();
    	while(Q--){
    		r = read(); n = read();
    		ans = 1;int cnt,p;
    		while(n != 1){
    			cnt = 0;p = low[n];
    			while(!(n % p)) ++cnt, n /= p;
    			ans = ans * dp[r][cnt] % mod;
    		}
    		printf("%d",ans); putchar('
    ');
    	}
    }
    
  • 相关阅读:
    vs快速添加引用解析的快捷键
    Linux内核调试技术——kprobe使用与实现
    Linux内核调试技术——kretprobe使用与实现
    Linux内核调试技术——jprobe使用与实现
    【HTTP协议】---HTTP协议详解
    雪崩效应
    Shell中IFS用法
    shell中for循环,读取一整行
    BCD码
    pam模块日志怎么输出
  • 原文地址:https://www.cnblogs.com/shikeyu/p/13799110.html
Copyright © 2011-2022 走看看