当前位置: 首页 > news >正文

基础打表练习题

求 A249665 前 \(n\) 项的 \(m\) 次方和,对 \(10^9 + 7\) 取模。

\(1 \leq n \leq 10^{18}\)\(1 \leq m \leq 3\)


我们可以暴力枚举 \(1\)\(n\) 的排列,由此求出 \(a_n\)

经过打表,可以得到 \(A\) 的前几项为 \(1,1,1,2,6,14,28,56,118,254,541,1140,2401,5074,10738\)

由此我们可以得到规律:\(a_n = -a_{n-8}-a_{n-7}+a_{n-5}+a_{n-4}+2 \times a_{n-3}-a_{n-2}+2 \times a_{n-1}\)

于是可以用矩阵快速幂求出 \(1\) 次方和,对于 \(2\) 次方和 \(3\) 次方可以打更多的表,最终会得到一百多项的递推式。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const long long mod=1000000007;
const int K1=8,K2=36,K3=120;
long long k_1[K1+1]={0,2,1000000006,2,1,1,0,1000000006,1000000006};
long long k_2[K2+1]={0,3,2,11,36,57,999999978,999999697,999999268,999999713,1022,1055,999999922,428,708,999999575,641,1883,1536,577,999999772,999999093,999998982,999999574,999999841,114,31,0,999999993,75,17,13,1000000005,1000000005,0,1,1000000006};
long long k_3[K3+1]={0,6,9,119,776,2928,999999866,999947231,999685929,999532233,1006034,3403103,3091675,18854028,41939739,994839435,123907888,686578570,538510624,463875551,593907298,775112621,862799554,826799974,323568509,272946549,865736932,849802794,311419209,805100035,339107278,456958980,305935140,337495512,230577161,989563382,512084924,610163742,175186535,153394145,542690041,50533570,340316201,88175161,908013867,593526711,370645361,270223951,599117789,984653980,300238059,940672603,619708604,241513668,555065433,447221261,517442267,369809014,727409057,654158750,399582554,676918142,975097682,435015557,940699679,119850330,454035523,899881054,501312719,213643333,937627741,348520370,422818051,912039075,988291205,627079501,197735216,763988949,402495671,193045517,116881412,386288279,506736426,560043784,134890183,826753538,554299933,726711648,124505105,979617265,769179718,964951092,201335067,391976488,964735448,16230894,520533206,281250193,800363870,100229687,972206749,12790510,994869596,1367679,999105328,1188015,999184856,110016,999999173,3761,162,1064,999998446,2081,999999729,7,6,1000000006,1000000005,0,1000000006};
long long f1[K3+1]={0,1,1,1,2,6,14,28,56},f2[K3+1],f3[K3+1],sf1[K3+1],sf2[K3+1],sf3[K3+1];
void init(){for(int i=9;i<=K3;i++){for(int j=1;j<=K1;j++){f1[i]+=f1[i-j]*k_1[j]%mod;f1[i]%=mod;}}for(int i=1;i<=K3;i++){f2[i]=f1[i]*f1[i]%mod;f3[i]=f1[i]*f1[i]%mod*f1[i]%mod;sf1[i]=(sf1[i-1]+f1[i])%mod;sf2[i]=(sf2[i-1]+f2[i])%mod;sf3[i]=(sf3[i-1]+f3[i])%mod;}
}
long long A[K3+1][K3+1],I[K3+1][K3+1],T[K3+1][K3+1];
long long solve1(long long n){if(n<=K1){return sf1[n];}for(int i=1;i<K1;i++){A[i][i-1]=1;}for(int i=1;i<=K1;i++){A[K1-i][K1-1]=k_1[i];A[K1-i][K1]=k_1[i];}A[K1][K1]=1;for(int i=0;i<=K1;i++){I[i][i]=1;}long long pow_num=n-K1;while(pow_num){if(pow_num&1){for(int i=0;i<=K1;i++){for(int j=0;j<=K1;j++){T[i][j]=0;for(int k=0;k<=K1;k++){T[i][j]+=I[i][k]*A[k][j]%mod;}T[i][j]%=mod;}}for(int i=0;i<=K1;i++){for(int j=0;j<=K1;j++){I[i][j]=T[i][j];}}}for(int i=0;i<=K1;i++){for(int j=0;j<=K1;j++){T[i][j]=0;for(int k=0;k<=K1;k++){T[i][j]+=A[i][k]*A[k][j]%mod;}T[i][j]%=mod;}}for(int i=0;i<=K1;i++){for(int j=0;j<=K1;j++){A[i][j]=T[i][j];}}pow_num>>=1;}long long ans=0;for(int i=0;i<K1;i++){ans+=f1[i+1]*I[i][K1]%mod;ans%=mod;}ans+=sf1[K1]*I[K1][K1]%mod;ans%=mod;return ans;
}
long long solve2(long long n){if(n<=K2){return sf2[n];}for(int i=1;i<K2;i++){A[i][i-1]=1;}for(int i=1;i<=K2;i++){A[K2-i][K2-1]=k_2[i];A[K2-i][K2]=k_2[i];}A[K2][K2]=1;for(int i=0;i<=K2;i++){I[i][i]=1;}long long pow_num=n-K2;while(pow_num){if(pow_num&1){for(int i=0;i<=K2;i++){for(int j=0;j<=K2;j++){T[i][j]=0;for(int k=0;k<=K2;k++){T[i][j]+=I[i][k]*A[k][j]%mod;}T[i][j]%=mod;}}for(int i=0;i<=K2;i++){for(int j=0;j<=K2;j++){I[i][j]=T[i][j];}}}for(int i=0;i<=K2;i++){for(int j=0;j<=K2;j++){T[i][j]=0;for(int k=0;k<=K2;k++){T[i][j]+=A[i][k]*A[k][j]%mod;}T[i][j]%=mod;}}for(int i=0;i<=K2;i++){for(int j=0;j<=K2;j++){A[i][j]=T[i][j];}}pow_num>>=1;}long long ans=0;for(int i=0;i<K2;i++){ans+=f2[i+1]*I[i][K2]%mod;ans%=mod;}ans+=sf2[K2]*I[K2][K2]%mod;ans%=mod;return ans;
}
long long solve3(long long n){if(n<=K3){return sf3[n];}for(int i=1;i<K3;i++){A[i][i-1]=1;}for(int i=1;i<=K3;i++){A[K3-i][K3-1]=k_3[i];A[K3-i][K3]=k_3[i];}A[K3][K3]=1;for(int i=0;i<=K3;i++){I[i][i]=1;}long long pow_num=n-K3;while(pow_num){if(pow_num&1){for(int i=0;i<=K3;i++){for(int j=0;j<=K3;j++){T[i][j]=0;for(int k=0;k<=K3;k++){T[i][j]+=I[i][k]*A[k][j]%mod;}T[i][j]%=mod;}}for(int i=0;i<=K3;i++){for(int j=0;j<=K3;j++){I[i][j]=T[i][j];}}}for(int i=0;i<=K3;i++){for(int j=0;j<=K3;j++){T[i][j]=0;for(int k=0;k<=K3;k++){T[i][j]+=A[i][k]*A[k][j]%mod;}T[i][j]%=mod;}}for(int i=0;i<=K3;i++){for(int j=0;j<=K3;j++){A[i][j]=T[i][j];}}pow_num>>=1;}long long ans=0;for(int i=0;i<K3;i++){ans+=f3[i+1]*I[i][K3]%mod;ans%=mod;}ans+=sf3[K3]*I[K3][K3]%mod;ans%=mod;return ans;
}
int main(){init();long long n;int m;scanf("%lld %d",&n,&m);if(m==1){printf("%lld",solve1(n));}else if(m==2){printf("%lld",solve2(n));}else{printf("%lld",solve3(n));}return 0;
}
http://www.jsqmd.com/news/205808/

相关文章:

  • 计算机深度学习毕设实战-基于卷神经网络深度学习识别水果的成熟度
  • 【毕业设计】机器学习基于python深度学习识别水果的成熟度
  • 楼宇设备运维标准规范:以标准化体系提升物业运维能力
  • FastAPI异步方法中调用同步方法
  • 复杂项目迭代不踩坑,MonkeyCode 沉浸式开发让 AI 研发可控可追溯
  • 科研 PPT 还在 “复制粘贴”?虎贲等考 AI:10 分钟生成期刊级演示文稿,逻辑颜值双封神
  • 2026年企业知识库私有化部署厂商选型指南:安全与效率双驱动的落地路径 - 品牌2026
  • 中转平台终极测评:poloai.top 凭什么成为开发者首选? - poloapi-ai大模型
  • 问卷设计 “传统派 VS AI 派” 终极对决!虎贲等考 AI:让调研效率与质量双向碾压
  • 2026标书查重最强工具,快来为你的标书穿上“防弹衣” - 资讯焦点
  • 2026最新三轮车花鼓企业top5推荐榜!优质生产厂家及服务商解析/选择指南 - 全局中转站
  • 面积的定义应该突出数学本质
  • 配音培训机构排名2025年度配音培训机构十强榜出炉 - 资讯焦点
  • 真香警告!上下文工程才是AI开发未来,RAG已死?大模型开发者必看!
  • 将电子书文本转换为盲文格式,生成可打印的盲文文档,供视障用户阅读。
  • 深度学习计算机毕设之基于python深度学习的餐桌美食识别卷神经网络
  • AI城市管理综合执法系统:让城市治理有“智”更有“度”
  • 高通推出Dragonwing Q-7790 和 Q-8750 处理器,工业及嵌入式物联网布局已成型
  • 2026最新自行车花鼓/三轮车差速器企业首选推荐HOVERIC泓瑞凯:专注中高端领域,HOVERIC泓瑞凯实力领航 - 全局中转站
  • 课程论文 “速通” 指南!虎贲等考 AI 让学术输出又快又稳
  • JAVA基础语法与Spring笔记
  • 超越CRUD:在2026年AI重塑的行业里,程序员如何抢占新赛道与高价值生态位?
  • 《3万字+512GPU!Hugging Face这本“AI修炼秘籍“让小白秒变分布式训练高手,附4000次实验数据+可视化图解》
  • 【保姆级教程】从“陪聊“到“打工“,Google教你构建自己的AI智能体,代码示例全在这!
  • PPO过时了?GRPO/DAPO/GSPO/SAPO四大算法全面对比,揭秘最新强化学习技术趋势!
  • 强脑科技的核心硬件模组为何选择蓝思量产?
  • 全网最全专科生AI论文网站TOP9:开题报告文献综述必备
  • Claude Code之父Boris提出的 9 条 Claude Code 实战技巧
  • 震惊!AI已悄悄内化为你的编程伙伴,小白开发者必知的5大生存法则
  • 懒人福音!2025年Agent工具大盘点,小白程序员也能秒变AI大神!