快速幂
1.模板
求n的m次方
#include<iostream> #define MOD 1000000007 using namespace std; //递归快速幂 int quickpow(long long a,long long n){ if(n==0) return 1; else if(n%2==1){ return quickpow(a,n-1)*a%MOD; }else{ int t=quickpow(a,n/2)%MOD; return t*t%MOD; } } int Uquickpow(int a,int n){ int ans=1; while(n){ if(n&1){ //n最后一位等于1 ans=ans*a; } a=a*a; n>>=1;//n右移一位 } return ans; } int main() { cout<<Uquickpow(7,5); cout<<quickpow(7,5); }
2.题目
洛古p1045

#include<bits/stdc++.h> const long long mod=10000000000; using namespace std; const int N=1e5+10; int l=1,la=1; int ans[N]= {},a[N]= {},c[N]={}; using namespace std; void cheng1(){//ans*a memset(c,0,sizeof(c));//临时数组c for (int i = 1; i <= l; ++i) { for (int j = 1; j <= la; ++j) { c[i+j-1] += ans[i] * a[j]; c[i+j] += ( c[i+j-1] ) / 10; c[i+j-1] %= 10; } } int lc = l + la; while( c[lc] == 0 ) -- lc; for(int i = 1;i <= lc; ++i){ ans[i] = c[i]; } //l=lc if(lc>500){ l=500; }else{ l=lc; } } void cheng2(){//a*a memset(c,0,sizeof(c));//临时数组c for (int i = 1; i <= la; ++i) { for (int j = 1; j <= la; ++j) { c[i+j-1] += a[i] * a[j]; c[i+j] += ( c[i+j-1] ) / 10; c[i+j-1] %= 10; } } int lc = la + la; while( c[lc] == 0 ) -- lc; for(int i = 1;i <= lc; ++i){ a[i] = c[i]; } // la=lc; if(lc>500){ la=500; }else{ la=lc; } } void qpow(int P){ int ans=1; while(P){ if(P&1){ cheng1();//ans=ans*a } cheng2();//a=a*a P>>=1; } } int main() { int P; cin>>P; memset( a, 0, sizeof(a)); memset( ans, 0, sizeof(ans)); ans[1]=1; a[1]=2; qpow(P); // cout<<l<<endl; cout<<int((P*log10(2.0)+1))<<endl; ans[1]--; int num=0; for(int i=500;i>=1;i--){ cout<<ans[i]; num++; if(num==50){ cout<<endl; num=0; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律