UVA11582 幂取模,快速幂
来源:互联网 发布:网络机房整改目的 编辑:程序博客网 时间:2024/06/07 07:35
题意:输入两个非负整数a,b和正整数n(0<=a,b<2^66,1<=n<=1000),计算f(a^b)%n的余数,其中f(x)为斐波那契数;
思路:因为每一次求的都是模n的余数,不妨设F(x)=f(x)%n,又因为是取余,F(x)肯定存在周期T;所以只需要计算出F(0)~F(0+T-1),然后算出F(a^b)属于其中的位置就可以了;
#include<iostream>#include<cmath>#include<stdio.h>#include<cstring>#include<algorithm>#include<map>using namespace std;typedef unsigned long long ull;int s[1100][6600],g[1100];/*数组s[A][B]是用来记录当n为A时的F(x),数组g[x]记录当n为x时的周期*/int pow_mod(ull a,ull b,int n){ if(b==0) return 1; int x=pow_mod(a,b/2,n); x=x*x%n; if(b%2==1) x=x*a%n; return x;}int main(){ ull a,b; for(int i=2;i<=1000;i++) { s[i][0]=0; s[i][1]=1; for(int j=2;;j++) { s[i][j]=(s[i][j-1]+s[i][j-2])% i; if(s[i][j-1]==0&&s[i][j]==1) { g[i]=j-1; break; } } } int t; scanf("%d",&t); while(t--) { int n; scanf("%llu %llu %d",&a,&b,&n); if(a==0||n==1) { printf("0\n"); } else { int p=pow_mod(a%g[n],b,g[n]); printf("%d\n",s[n][p]); } } return 0;}
数论刚起步,如有错误还望指出,谢谢;
0 0
- UVA11582 幂取模,快速幂
- UVa11582 [快速幂]Colossal Fibonacci Numbers!
- UVa11582
- UVa11582 巨大的斐波那契数 循环节计算+快速幂
- UVA11582 求很大的斐波那契 快速幂膜
- UVa11582 巨大的斐波那契数列 (快速幂 同余数与模运算)
- uva11582 斐波拉切数列循环节+欧拉定理降幂
- UVA11582 Colossal Fibonacci
- Uva11582 Colossal Fibonacci Numbers!
- uva11582(模算数)
- 快速幂,快速幂取模
- 快速幂 + 快速幂取模
- 快速幂 快速幂取模
- 快速幂 快速幂取模
- 【快速幂】【快速幂取模】
- 《算法竞赛入门经典》第十章 数学概念与方法 UVa11582(幂取模,循环规律,模算术)
- uva11582(同余模基础)
- 【数论】Colossal Fibonacci Numbers!, UVa11582
- JS的Array的用法总结
- 随着RecycleView的滑动实现标题栏透明度渐变:
- 2017胡润中国富豪排行榜【完整版】-中国首富排行榜
- SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题
- bzoj4455 ZJOI2016 小星星
- UVA11582 幂取模,快速幂
- Ionic css组成(五)
- C#中窗体程序中快捷键的设置
- SpringBoot 定时任务@Scheduled详解
- 水池 数目
- 计算机组成原理
- 一款已上市MMO手游地图同步方案总结
- 高性能MySQL
- Android性能优化典范(三)