hdu-2814-Interesting Fibonacci-斐波那契循环节
哇塞,我竟然2A了。。。。没有1A纯粹是脑残了。。
求:F(a^b)^(F(a^b) ^ (n-1))%c
既是求F(a^b)^(F(a^b) ^ (n-1)%phi[c]+phi[c])%c
先求x=F(a^b)%phi[c],有循环节,直接找到循环节就OK。
然后求y=F(a^b)%c,同求x,循环节。
然后问题就变成求y^(x^(n-1)%phi[c]+phi[c])
直接套两次快速幂取模就OK。
#include <iostream>
#include<stdio.h>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
#define LL unsigned __int64
#define lcm(a,b) (a*b/gcd(a,b))
//O(n)求素数,1-n的欧拉数
#define N 110000
struct math_use
{
LL euler(LL x)
{
LL i, res = x;
for (i = 2; i*i <= x; i++)
if (x%i == 0)
{
res = res / i*(i - 1);
while (x%i == 0)
x /= i;
}
if (x > 1)
res = res / x*(x - 1);
return res;
}
//a^b%c
LL q_mod(LL a,LL b,LL n)
{
LL ret=1;
LL tmp=a;
while(b)
{
//基数存在
if(b&0x1) ret=ret*tmp%n;
tmp=tmp*tmp%n;
b>>=1;
}
return ret;
}
} M;
int smod[330];
int eur[330];
LL s_mod(int mod)
{
LL a1,a2,a3,tmp;
a1=0;
a2=1;
a3=1;
LL ans=1;
while(a2!=0||a3!=1)
{
tmp=(a2+a3)%mod;
a2=a3;
a3=tmp;
ans++;
}
return ans;
}
void init()
{
smod[1]=1;
eur[1]=M.euler(1);
for(int i=2; i<=300; i++)
{
smod[i]=s_mod(i);
eur[i]=M.euler(i);
}
}
LL get_fib(int x,int mod)
{
if(x==0)return 0;
LL a1,a2,a3,tmp;
a1=0;
a2=a3=1;
x--;
while(x--)
{
tmp=(a2+a3)%mod;
a2=a3;
a3=tmp;
}
return a2;
}
LL fib(LL a,LL b,LL mod)
{
LL ans=1;
int yu=smod[mod];
LL s=M.q_mod(a%yu,b,yu);
return get_fib(s,mod);
}
int main()
{
LL a,b,n,c;
init();
LL T;
cin>>T;
int cas=0;
while(T--)
{
cas++;
cin>>a>>b>>n>>c;
if(c==1)
{
printf("Case %d: 0\n",cas);
continue;
}
LL x,y;
LL mod,mod1;
mod=c;
mod1=eur[c];
x=fib(a,b,mod1);
y=fib(a,b,mod);
LL p=M.q_mod(x,(n-1)%eur[mod1]+eur[mod1],mod1);
LL ans=M.q_mod(y,p+mod1,mod);
printf("Case %d: ",cas);
cout<<ans<<endl;
}
return 0;
}
hdu-2814-Interesting Fibonacci-斐波那契循环节相关推荐
- C++fibonacci斐波那契数列,自下而上(附完整源码)
C++fibonacci斐波那契数列,自下而上 fibonacci斐波那契数列,自下而上算法的完整源码(定义,实现,main函数测试) fibonacci斐波那契数列,自下而上算法的完整源码(定义,实 ...
- java 斐波那契编程_Java实现Fibonacci(斐波那契)取余的示例代码
Java实现Fibonacci(斐波那契)取余的示例代码 发布时间:2020-10-09 06:05:36 来源:脚本之家 阅读:78 作者:南墙 Description Fibonacci数列的递推 ...
- 【C语言编程】求Fibonacci(斐波那契)数列前40个数
问题: 求Fibonacci(斐波那契)数列前40个数. 分析: 这个数列有如下特点:第1,2两个数为1,1.从第三个数开始,该数是其前面两个数之和.即该数列为1,1,2,3,5,8,13,- ,用数 ...
- 求Fibonacci(斐波那契)数列的的前n项
1.Fibonacci(斐波那契)数列的定义规律:第一项a1=0,第二项a2=1,从第三项起,每一项都等于前面两项之和. 2.使用a1,a2,a3进行迭代 代码 #include using name ...
- fibonacci斐波那契数列详解 递归求Fn非递归求Fn求n最近的斐波那契数
斐波那契fibonacci 斐波那契额数列即前两项F(0)和F(1)都是1,之后的每一项都是前两项相加和即F(3)=2,F(4)=3,F(5)=5; 通项公式:F(n+2)=F(n+1)+F(n). ...
- C++ 求Fibonacci(斐波那契数列)前n项的和
1.题目:求Fibonacci(斐波那契数列)前n项的和,n<=20 Fibonacci数: 1 1 2 3 5 8 13 21 34 - 思路:先求出前20项的数,分别存到数组中.需要时,直接 ...
- 用php递归求fibonacci数列,C++_C语言求Fibonacci斐波那契数列通项问题的解法总结,一:递归实现使用 - phpStudy...
C语言求Fibonacci斐波那契数列通项问题的解法总结 一:递归实现 使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1. 二:数组实现 空间复 ...
- day16:递归思想——Fibonacci 斐波那契数列
一.斐波那契数列(Fibonacci sequence),又称黄金分割数列,这个数列最早是由印度数学家提出来的. 该序列的前几项是这样的:0,1,1,2,3,5,8,13,21,34,⋯ 在数学上,斐 ...
- hdu 4099 字典树 + 斐波那契
题意: 给你一个串(最长40位)问你这个串是斐波那契F(n) n <= 99999中的那个数的前缀,如果存在多个输出最小的n否则输出-1. 思路: 给的串最长40位,那 ...
- python编写递归函数、求斐波那契数列第n项_Python非递归算法求解Fibonacci斐波那契数列...
斐波那契数列递归数学定义如下:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*) Python代码: 函数f(n),输入非负整数n,返回f[n] def f(n): a, ...
最新文章
- python简介、安装及基本设置
- 微服务架构及分布式事务解决方案
- 【js基础】理清Object、Object.prototype、Function、Function.prototype
- SAP供应商编码范围
- python网络编程(八)
- 公用ip地址查询_是什么使您无法更改公用IP地址并在Internet上造成严重破坏?
- 艾默生变频器报警PHP,艾默生ct变频器报警ou 这个CT的变频器报警UU怎么解决?
- 路由器mysql密码重置密码_【验证】mysql root密码恢复
- Mom and Dad
- WebSocket使用教程 - 带完整实例--网址:https://my.oschina.net/u/1266171/blog/357488
- Wireshark实战分析之IP协议(四)
- 计算机上可以插键盘吗,电脑键盘上这些按键竟然可以这样用?
- 北大青鸟学java是用什么课程_来自北大青鸟参加过JAVA课程的学长建议
- 在线客服系统可以帮助企业解决哪些问题?
- python解决鸡兔同笼_python解决鸡兔同笼问题
- 计算机学frm,FRM金融计算器使用教程
- jsp汽车销售系统带前端
- WebDAV之葫芦儿·派盘 + PDF Expert
- 嵌入式系统——复杂指令集系统与精简指令集系统(CISCRISC)
- .resource文件如何打开
热门文章
- 阿兰·麦席森·图灵(Alan Mathison Turing,1912.6.23—1954.6.7)
- 涓滴意念--java基础
- hot~《国家网络安全应急预案》你知道么。
- 距离差分矩阵DDM算法
- 如果你的键盘也没有大小写和数字指示灯
- Linux常用命令——jed命令
- (附源码)计算机毕业设计SSM中小学家校通系统
- php 日期单数 复数,参考ROR中的单复数转换,写一个PHP的单复数转换类
- 杭漂5年前端感受-白驹过隙,人生如梦
- 「蚂蚁金服」热搜的背后:「李开复」到底是不是口误?