当前位置:网站首页>(Codeforce 757)E. Bash Plays with Functions(积性函数)
(Codeforce 757)E. Bash Plays with Functions(积性函数)
2022-08-01 04:47:00 【AC__dream】
题目:
样例输入:
5
0 30
1 25
3 65
2 5
4 48
样例输出:
8
5
25
4
630
题意:
我们先来分析r=0的情况,假如我们现在求f0(n),n=p1^a1*p2^a2*……*pm^am
那么f0(n)就等于2^m,这是显然的,因为我们假设p=p1^b1*p2^b2*……*pm^bm,那么对于任意的bi(1<=i<=m)都有bi=0或者bi=ai,要不然不会存在q使得p*q=n且gcd(p,q)=1,那么我们就不难发现其实f0(x)是一个积性函数。假设对于n=p*q,gcd(p,q)=1,则p和q的质因子分解中不会存在相同质因子,不妨假设p有i个质因子,q有j个质因子,那么p*q就会有i+j个质因子,那么f0(pq)=2^(i+j)=2^i*2^j=f0(p)*f0(q),所以f0(x)是一个积性函数。
下面我用归纳法来证明对于任意的r都有fr(x)是一个积性函数。

我们知道对于r=0的情况f0(n)的值只与n的质因子的种类有关,而与具体的质因子无关,而r不为0的情况是由r=0的情况得到的,所以r不为0的时候与具体的质因子也不会有关系。我们上面推导了对于任意的r都有fr(x)是一个积性函数,所以我们求fr(n)时只需要看n的质因子分解情况即可,那么问题就转变为求解fr(p^i),p是一个质数,根据公式我们可以发现fr(p^i)=
,又因为与具体的质因子无关,通过上式我们可以发现只与质因子的次数有关,那么我们就可以令f[i][j]记录fi(p^j)的值 ,由于n是小于1e6的,所以质因子分解中最高次数不会超过20,这样通过O(r*20)就可以预处理出来所有的数。当r=0时,根据其定义我们可以知道f[0][1]=1,f[0][i]=2(i>1),预处理一下即可
剩下的就是对于每组询问记录一下质因子次数,直接利用积性函数性质求解了。
下面是代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
const int N=1e6+10,mod=1e9+7;
long long f[N][21];//f[i][j]表示fi(p^j)
int prime[N],tt;
bool vis[N];
void init()
{
f[0][0]=1;
for(int i=1;i<=20;i++) f[0][i]=2;
for(int i=1;i<=1000000;i++)
{
long long ans=0;
for(int j=0;j<=20;j++)
{
ans=(ans+f[i-1][j])%mod;
f[i][j]=ans;
}
}
}
int main()
{
init();
int T;
cin>>T;
while(T--)
{
int r,n;
scanf("%d%d",&r,&n);
long long ans=1;
for(int i=2;i*i<=n;i++)
{
int cnt=0;
if(n%i==0)
{
while(n%i==0)
{
n/=i;
cnt++;
}
ans=ans*f[r][cnt]%mod;
}
}
if(n>1) ans=ans*f[r][1]%mod;
printf("%lld\n",ans);
}
return 0;
}
边栏推荐
- Typescript20 - interface
- A way to deal with infinite debugger
- [FPGA tutorial case 43] Image case 3 - image sobel edge extraction through verilog, auxiliary verification through MATLAB
- 云服务器下载安装mongo数据库并远程连接详细图文版本(全)
- 在沈自所的半年总结
- What is a programming language
- TIM登陆时提示00001(TIM00001)
- mysql中解决存储过程表名通过变量传递的方法
- 7月编程排行榜来啦!这次有何新变化?
- [kali-information collection] enumeration - DNS enumeration: DNSenum, fierce
猜你喜欢

PAT乙级 1002 写出这个数

7 行代码搞崩溃 B 站,原因令人唏嘘!

TypeScript简化运行之ts-node

Message queue design based on mysql

Step by step hand tearing carousel Figure 3 (nanny level tutorial)

风险策略调优中重要的三步分析法

How to promote new products online?

Article summary: the basic model of VPN and business types

The method of solving stored procedure table name passing through variable in mysql

让你的 Lottie 支持文字区域内自动换行
随机推荐
UE4 rays flashed from mouse position detection
请问shake数据库中为什么读取100个collection 后,直接就退出了,不继续读了呢?
typescript26 - literal types
Dynamic Programming 01 Backpack
UE4 从鼠标位置射出射线检测
使用ts-node报错
The kernel's handling of the device tree
请问shake数据库中想把源的db0的数据同步到目的db5,参数怎么设置呢?
UE4 制作遇到的问题
【kali-信息收集】枚举——DNS枚举:DNSenum、fierce
In the shake database, I want to synchronize the data of the source db0 to the destination db5, how to set the parameters?
今日睡眠质量记录68分
lambda
在沈自所的半年总结
认真对待每一个时刻
TIM登陆时提示00001(TIM00001)
Immutable
Immutable
mysql中解决存储过程表名通过变量传递的方法
「以云为核,无感极速」顶象第五代验证码