Colossal Fibonacci Numbers!(裴波那切数列性质)

2023-10-08 04:48

本文主要是介绍Colossal Fibonacci Numbers!(裴波那切数列性质),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
题意:就是让你求f(a^b)%n。数据大,很明显暴力是不可能的,这辈子都不可能的…

思路:裴波那切数列有一个性质,尾数循环。

斐波那契数列的个位数:一个60步的循环

最后两位数是一个300步的循环

最后三位数是一个1500步的循环

最后四位数是一个15000步的循环

最后五位数是一个150000步的循环

求出对应的循环周期,问题就变成了快速幂取模了。

#include<stdio.h>
#include<string.h>
typedef unsigned long long ull;
ull f[1000100];
ull quick_mod(ull a,ull b,ull n)
{ull res=1;while(b){if(b&1)res=((res%n)*(a%n))%n;a=((a%n)*(a%n))%n;   //由于给出的n比较大所以~b>>=1;     //>>和<<符号省时}return res%n;
}
int main()
{int t,i,j;ull a,b,n,s,q;scanf("%d",&t);while(t--){scanf("%llu%llu%llu",&a,&b,&n);  //数据大,用llu存if(a==0||n==1){printf("0\n");continue;}int ans=0;f[0]=0,f[1]=1;f[2]=1;for(i=2; i<=n*n; i++) //裴波那切数列一性质:不超过n*n{f[i]=(f[i-1]+f[i-2])%n;ans++;          //循环周期if(f[i]==1&&f[i-1]==0)break;}int p=quick_mod(a,b,ans);printf("%llu\n",f[p]);}return 0;
}

这篇关于Colossal Fibonacci Numbers!(裴波那切数列性质)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/162793

相关文章

计蒜客 Half-consecutive Numbers 暴力打表找规律

The numbers 11, 33, 66, 1010, 1515, 2121, 2828, 3636, 4545 and t_i=\frac{1}{2}i(i+1)t​i​​=​2​​1​​i(i+1), are called half-consecutive. For given NN, find the smallest rr which is no smaller than NN

高精度打表-Factoring Large Numbers

求斐波那契数,不打表的话会超时,打表的话普通的高精度开不出来那么大的数组,不如一个int存8位,特殊处理一下,具体看代码 #include<stdio.h>#include<string.h>#define MAX_SIZE 5005#define LEN 150#define to 100000000/*一个int存8位*/int num[MAX_SIZE][LEN];void

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

leetcode#628. Maximum Product of Three Numbers

题目 Given an integer array, find three numbers whose product is maximum and output the maximum product. Example 1: Input: [1,2,3]Output: 6 Example 2: Input: [1,2,3,4]Output: 24 Note: The lengt

leetCode#448. Find All Numbers Disappeared in an Array

Description Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once. Find all the elements of [1, n] inclusive that do not appear in this

对极约束及其性质 —— 公式详细推导

Title: 对极约束及其性质 —— 公式详细推导 文章目录 前言1. 对极约束 (Epipolar Constraint)2. 坐标转换 (Coordinate Transformations)3. 像素坐标 (Pixel Coordinates)4. 像素坐标转换 (Transformations of Pixel Coordinates)5. 本质矩阵 (Essential Matr

js,给定一个数,如何求Fibonacci值

/*给定一个数,如何求Fibonacci值::F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2)*/ function fibonacci(n){        if(n<2){             return n;          }        return fibonacci(n-1)+fibonacci(n-2); } alert(fibonacci(6)

【练习7】Fibonacci数列

链接:https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66 分析: 当n为15的时候,可以用Math.min(c-n,n-b)来判断哪个是变成斐波那契数的最小步数。 public class Main {public static void main(String[] args) {Scanner i

牛客《剑指Offer》 -- 斐波那契数列

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39 思路 对于n=0,应返回0。 class Solution {public:int Fibonacci(int n) {if(n==0) return 0;if(n==1||n==2) return 1;int a=1,b=1,c;n= n-2;for(int i =0

面试题41:和为s的两个数VS和为s的连续正数数列

问题说明: 1.和为s的两个数问题是从一个排序的数组中找出和为s的两个数; 2.原题是找出一个即可,现在全部找出; 3.和为s的连续正数数列是给定一个数找出所有连续正数数列的和为s,例如s为9,(2,3,4)就是其中一组。 (一)和为s的两个数问题 public static int findNumbersWithSum(int[] sorted, int fromIndex, in