Colossal Fibonacci Numbers! UVA 11582 寻找循环节
/**
题目:Colossal Fibonacci Numbers! UVA 11582
链接:https://vjudge.net/problem/UVA-11582
题意:f[0] = 1, f[1] = 1; 给定一个n,求f[a^b]%n的结果。a,b达到2^64 - 1大。
思路:a,b很大,用无符号长整型;我还是太菜了,自己没想出来。这道题很显然是找循环节的题。但我不知怎么找。
lrj P316
思路就是,由于fibonacci数是由前两个数相加得来,又%n;所以所有fibonacci取余后,结果都在1000以内。
两个连续的数最多只有1000×1000种。所以循环节就会出现。
我一开始以为可能是混循环或者纯循环两种情况。然后搞得很麻烦。
实际上只有一种情况:纯循环;
证明:假设存在混循环,f[0] f[1] f[2] ... f[i] f[i+1] ... f[j] f[j+1]...
f[i]==f[j], f[i+1]==f[j+1]; 由于f[i+1] = f[i]+f[i-1] , f[j+1] = f[j]+f[j-1] 所以显然f[i-1]==f[j-1]; 那么f[i-1] f[i] f[j-1] f[j]又是一个循环节。同理一直推到f[0] f[1]开始的循环。 所以都是纯循环。 */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <vector>
#include <cmath>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf = 0x3f3f3f3f;
const int maxn = 1e3+;
const double eps = 1e-;
int f[maxn*maxn];
ull a, b;
int n;
ll PowMod(int mod)
{
ll p = ;
a %= mod;
ll x = a;
while(b>){
if(b&) p = p*x%mod;
x = x*x%mod;
b >>= ;
}
return p;
}
void solve()
{
f[] = ;
f[] = ;//n = 1 的时候 这里为0
int ed;
for(int i = ; i <= n*n; i++){
f[i] = f[i-]+f[i-];
f[i] %= n;
if(f[i-]==f[]&&f[i]==f[]){
ed = i-; ///[st, ed]
break;
}
}
ll pos = PowMod(ed);
printf("%d\n",f[pos]);
}
int main()
{
int T;
cin>>T;
while(T--){
scanf("%llu%llu%d",&a,&b,&n);
if(a==||n==){///处理0^ei的情况,以及对1取模值肯定为0;
printf("0\n"); continue;
}
solve();
}
return ;
}
Colossal Fibonacci Numbers! UVA 11582 寻找循环节的更多相关文章
- Colossal Fibonacci Numbers! UVA - 11582(快速幂,求解)
Problem Description The i’th Fibonacci number f(i) is recursively defined in the following way: •f(0 ...
- UVA 11582 Colossal Fibonacci Numbers(数学)
Colossal Fibonacci Numbers 想先说下最近的状态吧,已经考完试了,这个暑假也应该是最后刷题的暑假了,打完今年acm就应该会退了,但是还什么都不会呢? +_+ 所以这个暑假,一定 ...
- UVa 11582 Colossal Fibonacci Numbers! 紫书
思路是按紫书上说的来. 参考了:https://blog.csdn.net/qwsin/article/details/51834161 的代码: #include <cstdio> # ...
- UVa-11582:Colossal Fibonacci Numbers!(模算术)
这是个开心的题目,因为既可以自己翻译,代码又好写ヾ(๑╹◡╹)ノ" The i’th Fibonacci number f(i) is recursively defined in the f ...
- Colossal Fibonacci Numbers(巨大的斐波那契数)UVA 11582
评测地址:http://acm.hust.edu.cn/vjudge/problem/41990 The i'th Fibonacci number f (i) is recursively de n ...
- UVa 11582 Colossal Fibonacci Numbers! 【大数幂取模】
题目链接:Uva 11582 [vjudge] watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fil ...
- hdu1005 Number Sequence(寻找循环节)
主题链接: pid=1005">huangjing 题意: 就是给了一个公式,然后求出第n项是多少... 思路: 题目中n的范围实在是太大,所以肯定直接递推肯定会超时,所以想到的是暴力 ...
- Uva11582 Colossal Fibonacci Numbers!(同余模定理+快速幂)
https://vjudge.net/problem/UVA-11582 首先明确,斐波那契数列在模c的前提下是有循环节的.而f[i] = f[i-1]+f[i-2](i>=2)所以只要有两个连 ...
- F(N)---hdu2802(寻找循环节)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2802 f[1] = 1; f[2] = 7; f[n] = (f[n-2] - (n-1)*(n-1) ...
随机推荐
- Swift,字符串
1.字符串只能使用双引号 var a="你好" 2.单字与多字 var a:Character="1" var b:String="12" ...
- nodeJs建立简单的服务器
var http = require('http');//http依赖 var hostname = '127.0.0.1';//本地 var port = 3000;//端口 var server ...
- android 电话薄先10位匹配,若是无法匹配,则换成7位匹配
案例 1: 假设您保存的有:A:04165191666. B:5191666. 来电号码是:04165191666 由于是7位匹配,所以A和B都能够匹配到.可是最佳匹配还是A,最后显示A: 来电 ...
- HDU 4289 Control (最小割 拆点)
Control Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- Sublime Theme
Package Control Messages======================== Theme - Spacegray----------------- Thanks for insta ...
- Oracle 存储过程调用返回游标的另一个存储过程。
一个扩展存储过程调用另一个存储过程,示例: 被调用存储过程:最后会返回一个游标,游标返回一个值.调用这个存储过程的存储过程同样需要获取它. procedure SearchBill --根据到货单号查 ...
- StandardServer.await: create[8005]java.net.BindException: Address already in use: JVM_Bind错误
StandardServer.await: create[8005]java.net.BindException: Address already in use: JVM_Bind错误. 原因是:To ...
- FD_SET 详解
http://blog.csdn.net/stephen_yin/article/details/7441165
- Android 关于ZXing的使用
1.http://blog.csdn.net/ryantang03/article/details/7831826 2.http://blog.csdn.net/xiaanming/article/d ...
- 写入文件,创建xunlei批量任务
[php] <?php $arr = array(); $arr[] = 'http://s1.dwstatic.com/group1/M00/83/4A/834a040953745f52e8a ...