zoukankan      html  css  js  c++  java
  • Codeforces 757 E Bash Plays with Functions

    Discription

    Bash got tired on his journey to become the greatest Pokemon master. So he decides to take a break and play with functions.

    Bash defines a function f0(n), which denotes the number of ways of factoring n into two factors p and q such that gcd(p, q) = 1. In other words, f0(n) is the number of ordered pairs of positive integers (p, q) such that p·q = n and gcd(p, q) = 1.

    But Bash felt that it was too easy to calculate this function. So he defined a series of functions, where fr + 1 is defined as:

    Where (u, v) is any ordered pair of positive integers, they need not to be co-prime.

    Now Bash wants to know the value of fr(n) for different r and n. Since the value could be huge, he would like to know the value modulo 109 + 7. Help him!

    Input

    The first line contains an integer q (1 ≤ q ≤ 106) — the number of values Bash wants to know.

    Each of the next q lines contain two integers r and n (0 ≤ r ≤ 1061 ≤ n ≤ 106), which denote Bash wants to know the value fr(n).

    Output

    Print q integers. For each pair of r and n given, print fr(n) modulo 109 + 7 on a separate line.

    Example

    Input
    5
    0 30
    1 25
    3 65
    2 5
    4 48
    Output
    8
    5
    25
    4
    630


    题解见代码注释。
    就是个积性函数的题

    /*
        首先可以发现f0(x)=2^k  ,其中k为x的质因子数。
    	然后对于r>=1, fr(x)=Σfr-1(d) 其中d|x。
    	
    	又∵f0是积性函数,fr=fr-1卷1,所以fr也是积性函数。
    	所以fr(x)=πfr(pi^ai)
    	
    	还可以发现的是只要ai一样的话fr(pi^ai)是一样的,
    	所以fr(pi^ai)只与质因子的次数有关。
    	 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<vector>
    #include<cmath>
    #include<algorithm>
    #define ll long long
    #define maxn 1000005
    #define pb push_back
    using namespace std;
    const ll ha=1000000007;
    struct req{
    	int num,ci;
    };
    vector<req> g[maxn];
    int f[maxn][23],T,mx;
    int R,N,ans[maxn];
    
    inline int add(int x,int y){
    	x+=y;
    	if(x>=ha) return x-ha;
    	else return x;
    }
    
    inline void dp(){
    	f[0][0]=1;
    	for(int i=1;i<=20;i++){
    		f[0][i]=2;
    	}
    	
    	for(int i=1;i<=mx;i++){
    		f[i][0]=f[i-1][0];
    		for(int j=1;j<=20;j++) f[i][j]=add(f[i][j-1],f[i-1][j]);
    	}
    }
    
    bool v[maxn];
    
    inline void init(){
    	fill(ans+1,ans+T+1,1);
    	int now,c,sz;
    	req x;
    	for(int i=2;i<=1000000;i++) if(!v[i]){
    		for(int j=i;j<=1000000;j+=i){
    			v[j]=1;
    			sz=g[j].size();
    			if(sz){
    				now=j,c=0;
    				while(!(now%i)) now/=i,c++;
    				for(int k=0;k<sz;k++){
    					x=g[j][k];
    					ans[x.num]=ans[x.num]*(ll)f[x.ci][c]%ha;
    				}
    			}
    		}
    	}
    }
    
    int main(){
    	scanf("%d",&T);
    	for(int i=1;i<=T;i++){
    		scanf("%d%d",&R,&N);
    		mx=max(mx,R);
    		g[N].pb((req){i,R});
    	}
    	dp();
    	init();
    	
    	for(int i=1;i<=T;i++) printf("%d
    ",ans[i]);
    	return 0;
    } 
    

      




  • 相关阅读:
    C# a标签请求下载文件
    jquery datatable无数据提示不居中显示
    visual studio使用dos命令在生成项目时复制文件到指定目录
    技嘉,u盘安装win7,提示“找不到驱动器设备驱动程序”
    MQTT + apache-apollo服务器初学使用
    svn的基本使用方法
    linux之用户密码破解的操作
    mysql的部署
    nginx服务器
    部署
  • 原文地址:https://www.cnblogs.com/JYYHH/p/8449420.html
Copyright © 2011-2022 走看看