#include<bits/stdc++.h> #define N 100005 using namespace std; int dp1[N],dp2[345][N]; int main() { int n,m,p; scanf("%d%d",&n,&p); m=sqrt(n)+1; dp1[0]=1; for(int i=1;i<m;i++) for(int j=i;j<=n;j++) dp1[j]+=dp1[j-i],dp1[j]%=p; dp2[0][0]=1; for(int i=1;i<m;i++) for(int j=i;j<=n;j++) { dp2[i][j]=dp2[i][j-i]; if( j >= m ) dp2[i][j]+=dp2[i-1][j-m]; dp2[i][j]%=p; } int ans = 0; for(int i=0;i<=n;i++) { long long sum = 0; for(int j=0;j<m;j++) sum+=dp2[j][n-i]; sum%=p; ans=(ans+dp1[i]*sum)%p; } printf("%d",ans); return 0; }
原文:https://www.cnblogs.com/oiercc/p/12769840.html