博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jzoj5813
阅读量:5141 次
发布时间:2019-06-13

本文共 1694 字,大约阅读时间需要 5 分钟。

这里写图片描述

tj:可以知道,隨意構造一個數列x,且x的第i位被n整除的方案是(約數個數)^2m,因為所有數可以隨便選,只要這個數能被n整除即可,方案為約數個數

設一個合法數列a的f值為x,則x小於n^m

假設所有數都取到n,則式子的值為n^(2m)。

我們可以另外構造一個數列a2,其每一個數的值為(n/a1,n/a2…..n/am*2)。

則這個數列的f值為n^(2m)/x。這個值大於n^m

所以可以知道每一個a小於n^m的情況都對應著一種a大於n^m的情況

設f值小於,等於,大於n^m的數列個數為a,b,c

則有a==c 且a+b+c==(約數個數)^2m

題目要求a+b的值,但是a不知道

如果我們求出f的值==n^m的情況,要比求出f的值小於n^m的情況要簡單的多,所以我們可以選擇求出f的值==n^m的情況

也就是說,我們求出b,有2*a=(約數個數)^2m-b,a=((約數個數)^2m-b)/2,a+b=((約數個數)^2m+b)/2,這樣子可以很快的計算出答案a+b

所以,本題實質上是要求出數列(a1,a2,……am*2)==n^m的方案

對於n的每一個因子,可以分開考慮,在結束以後再把所有方案乘起來

設現在要處理的因子為x,在n中有y個,那麼n^m中有m*y個

則問題轉化為了下面一個形式:

有2*m個不同籃子,m*y個蘋果,每一個籃子可以放0至y個蘋果,問有多少種方法,蘋果必須放完

可以dp,設f[i][j]表示在第i個籃子,當前放了j個蘋果的方案

則f[i][j]=sigma(f[i-1][j-k]),且(0<=k<=y),i<=m,j<=k,每一個狀態枚舉在當前的籃子裡放多少個蘋果

初值f[0][0]=1,最終將所有f[2*m][m*y]乘起來就是s2

再套用原來的公式可以得到答案

代碼

#include
using namespace std;#define mo 998244353typedef long long ll;ll n,m,f[210][4010],ans=1;ll qp(ll x,ll y){ if(!y)return 1; if(y==1)return x%mo; ll r=qp(x,y>>1)%mo; if(y%2==0)return r*r%mo; else return r*r%mo*x%mo;}void cal(ll &x,ll y){ ll ct=0; while(x%y==0){ x/=y; ct++; } memset(f,0,sizeof(f)); f[0][0]=1; for(ll i=1;i<=m*2;i++) for(ll j=0;j<=ct*m;j++) for(ll k=0;k<=min(ct,j);k++) f[i][j]=(f[i][j]+f[i-1][j-k])%mo; ans=(ans*f[2*m][ct*m])%mo;}int main(){ freopen("count.in","r",stdin); freopen("count.out","w",stdout); scanf("%lld%lld",&n,&m); ll rt=sqrt(n),ct=0,tp=n; for(ll i=1;i<=rt;i++) if(n%i==0)ct+=(i*i==n?1:2); for(ll i=2;i<=rt;i++) if(tp%i==0)cal(tp,i); if(tp>1)cal(tp,tp); ct=qp(ct,m*2); printf("%lld",(ct+ans)*qp(2,mo-2)%mo);}

转载于:https://www.cnblogs.com/rilisoft/p/10385297.html

你可能感兴趣的文章
淌淌淌
查看>>
MySQL-定时任务
查看>>
web页面实现指定区域打印功能
查看>>
使用PHP拆分中文字符串的方法(收藏) 小节
查看>>
android系统权限的管理
查看>>
win10每次开机都显示“你的硬件设置已更改,请重启电脑……”的解决办法
查看>>
因Window服务器自动更新并重启导致WebSphere服务停止服务故障一例
查看>>
如何开启safari的调试
查看>>
js深拷贝和浅拷贝
查看>>
node.js 基础学习笔记1
查看>>
如何在linux系统中设置静态ip地址
查看>>
二分查找法,折半查找原理
查看>>
DP简单问题联系--最长递增子序列+最长公共子序列等
查看>>
2017-4-18 Zabbix server的安装以及ansible批量部署zabbix agent的工作笔记
查看>>
GridView 动态列上方添加相应的Combox等控件
查看>>
申请开发者账号
查看>>
oracle启动
查看>>
c++模板学习
查看>>
【转】MySQL Event
查看>>
[转]html5监听任何App自带返回键javascript事件
查看>>