目录
链接
题目
Description
给出两个整数 , 。问有多少个长度为 的序列 ,满足以下条件:
-
≤ ≤ ( = , , · · · , )
-
, 是 的倍数。
由于答案可能很大,所以你只需要输出答案对 取模的结果。
Format
Input
输入只有一行,两个整数 , ()。
Output
输出只有一行,输出方案数。
Samples
输入数据 1
3 4
输出数据 1
13
输入数据 2
20 30
输出数据 2
71166
输入数据 3
200000 200000
输出数据 3
835917264
Limitation
s, KiB for each test case.
解法
额(⊙o⊙)…,此题算是普及组里的核导弹了
它虽然不用高精度(要不然它可能就进提高组了),不过似乎只能骗分
没错,我用了dfs来骗分!!!
代码之本代码
#include<bits/stdc++.h>
#pragma GCC optimize(1,"Ofast","inline")
#pragma GCC optimize(2,"Ofast","inline")
#pragma GCC optimize(3,"Ofast","inline")
using namespace std;
int n,m;
long long ans;
void dfs(int l,int s){
if(l==n+1){
ans++;
ans%=(long long)998244353;
return;
}
for(int i=1;i<=m/s;i++){
dfs(l+1,i*s);
}
}
signed main(){
scanf("%d %d",&n,&m);
dfs(1,1);
printf("%lld",ans);
return 0;
}
大佬释迦牟尼的讲解
观自在菩萨。行深般若波罗蜜多时。照见五蕴皆空。度一切苦厄。舍利子。色不异空。空不异色。色即是空。空即是色。受想行识亦复如是。舍利子。是诸法空相。不生不灭。不垢不净。不增不减。是故空中无色。无受想行识。无眼耳鼻舌身意。无色声香味触法。无眼界。乃至无意识界。无无明。亦无无明尽。乃至无老死。亦无老死尽。无苦集灭道。无智亦无得。以无所得故。菩提萨埵。依般若波罗蜜多故。心无挂碍。无挂碍故。无有恐怖。远离颠倒梦想。究竟涅槃。三世诸佛。依般若波罗蜜多故。得阿耨多罗三藐三菩提。故知般若波罗蜜多。是大神咒。是大明咒。是无上咒。是无等等咒。能除一切苦。真实不虚。故说般若波罗蜜多咒。即说咒曰:揭谛揭谛。波罗揭谛。波罗僧揭谛。菩提萨婆诃。
龟哥(扔袜子):废话少说!
我的方法是依次算出
而大佬的方法是隔板法
就是类似于这样
|||||||
就类似于这样(事实上我也没搞明白,只要满分就行了,愿意的可以深究)
满分代码
#include<bits/stdc++.h>
#define M 998244353
using namespace std;
int dp[20]={1},n,m;
int solve(int k){
int ans=1;
for(int i=2;i*i<=k;++i){
if(k%i) continue;
int c=0;
while(k%i==0) k/=i,++c;
ans=ans*1LL*dp[c]%M;
}
if(k>1) ans=ans*1LL*dp[1]%M;
return ans;
}
int main(){
int ans=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=19;j++)
(dp[j]+=dp[j-1])%=M;
for(int i=1;i<=m;i++)
(ans+=solve(i))%=M;
printf("%d",ans);
return 0;
}