Interesting Fibonacci

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1071    Accepted Submission(s): 229

Problem Description
In
mathematics, the Fibonacci numbers are a sequence of numbers named
after Leonardo of Pisa, known as Fibonacci (a contraction of filius
Bonaccio, "son of Bonaccio"). Fibonacci's 1202 book Liber Abaci
introduced the sequence to Western European mathematics, although the
sequence had been previously described in Indian mathematics.
  The
first number of the sequence is 0, the second number is 1, and each
subsequent number is equal to the sum of the previous two numbers of the
sequence itself, yielding the sequence 0, 1, 1, 2, 3, 5, 8, etc. In
mathematical terms, it is defined by the following recurrence relation:

That
is, after two starting values, each number is the sum of the two
preceding numbers. The first Fibonacci numbers (sequence A000045 in
OEIS), also denoted as F[n];
F[n] can be calculate exactly by the following two expressions:


A
Fibonacci spiral created by drawing arcs connecting the opposite
corners of squares in the Fibonacci tiling; this one uses squares of
sizes 1, 1, 2, 3, 5, 8, 13, 21, and 34;

So you can see how interesting the Fibonacci number is.
Now AekdyCoin denote a function G(n)

Now your task is quite easy, just help AekdyCoin to calculate the value of G (n) mod C
 
Input
The
input consists of T test cases. The number of test cases (T is given in
the first line of the input. Each test case begins with a line
containing A, B, N, C (10<=A, B<2^64, 2<=N<2^64,
1<=C<=300)
 
Output
For
each test case, print a line containing the test case number( beginning
with 1) followed by a integer which is the value of G(N) mod C
 
Sample Input
1
17 18446744073709551615 1998 139
 
Sample Output
Case 1: 120
 
Author
AekdyCoin
 思路:欧拉函数;
G(n)= F(a^b)^((F(a^b))^(N-1));然后,找一下数列的循环节,然后应为a^b>300,所以直接用欧拉降幂,((F(a^b)^(N-1))%oula[C] + oula[C]);因为F(a^b)^(N-1) > oula[C];
这样幂数就就降下来了。
  1 #include<stdio.h>
2 #include<algorithm>
3 #include<stdlib.h>
4 #include<queue>
5 #include<iostream>
6 #include<string.h>
7 #include<math.h>
8 using namespace std;
9 typedef unsigned long long LL;
10 bool prime[400];
11 int ans[400];
12 int oula[400];
13 int ff[30];
14 typedef struct node
15 {
16 LL m[2][2];
17 node()
18 {
19 memset(m,0,sizeof(m));
20 }
21 } maxtr;
22 int f[10000];
23 int fin(LL n);
24 LL quick(LL n,LL m,LL mod);
25 int main(void)
26 {
27 memset(prime,0,sizeof(prime));
28 int i,j;
29 for(i = 0; i <= 300; i++)
30 {
31 oula[i] = i;
32 }
33 int cn = 0;
34 for(i = 2; i <= 300; i++)
35 {
36 if(!prime[i])
37 {
38 ans[cn++] = i;
39 for(j = i; (i*j) <= 300; j++)
40 {
41 prime[i*j] = true;
42 }
43 }
44 }//printf("%d\n",cn);
45 for(i = 0; i < cn; i++)
46 {
47 for(j = 1; ans[i]*j <= 300; j++)
48 {
49 oula[ans[i]*j]/=ans[i];
50 oula[ans[i]*j]*=(ans[i] - 1);
51 }
52 }
53 ff[0] = 0;
54 ff[1] = 1;
55 for(i = 2; i <= 20; i++)
56 {
57 ff[i] = ff[i-1]+ff[i-2];
58 }
59 //printf("%d\n",ff[20]);
60 LL A,B,N,C;
61 int T;
62 scanf("%d",&T);
63 int __ca = 0;
64 while(T--)
65 {
66 scanf("%llu %llu %llu %llu",&A,&B,&N,&C);
67 {
68 printf("Case %d: ",++__ca);
69 if(C == 1)
70 printf("0\n");
71 else
72 {
73 int k = fin(C);
74 LL ask = quick(A,B,(LL)k);
75 LL c = (LL)f[ask];
76 if(c == 0)
77 printf("0\n");
78 else
79 {
80 LL v = A;
81 LL x = B;
82 int flag = 0;
83 {
84 int u = fin((LL)oula[C]);
85 LL avk = quick(A,B,(LL)u);
86 LL app = (LL)f[avk];
87 LL ni = quick(app,N-1,(LL)oula[C]);
88 ni = ni + (LL)oula[C];
89 printf("%llu\n",quick(c,ni,C));
90 }
91 }
92 }
93 }
94 }
95 return 0;
96 }
97 int fin(LL n)
98 {
99 f[0] = 0;
100 f[1] = 1;
101 int id;
102 int i;
103 for(i = 2; i < 5000; i++)
104 {
105 f[i] = f[i-1]+f[i-2];
106 f[i]%=n;
107 if(f[i] == f[1]&&f[0] == f[i-1])
108 {
109 id = i-2;
110 break;
111 }
112 }//printf("%d\n",id);
113 return id+1;
114 }
115 LL quick(LL n,LL m,LL mod)
116 {
117 LL ak = 1;
118 n%=mod;
119 while(m)
120 {
121 if(m&1)
122 {
123 ak = ak*n%mod;
124 }
125 n = n*n%mod;
126 m/=2;
127 }
128 return ak;
129 }

Interesting Fibonacci(hdu 2814)的更多相关文章

  1. hdu 2814 Interesting Fibonacci

    pid=2814">点击此处就可以传送 hdu 2814 题目大意:就是给你两个函数,一个是F(n) = F(n-1) + F(n-2), F(0) = 0, F(1) = 1; 还有 ...

  2. hdu Interesting Fibonacci

    Interesting Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  3. HDU 2814 斐波那契循环节 欧拉降幂

    一看就是欧拉降幂,问题是怎么求$fib(a^b)$,C给的那么小显然还是要找循环节.数据范围出的很那啥..unsigned long long注意用防爆的乘法 /** @Date : 2017-09- ...

  4. BestCoder10 1001 Revenge of Fibonacci(hdu 5018) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5018 题目意思:给出在 new Fibonacci 中最先的两个数 A 和 B(也就是f[1] = A ...

  5. (字典树)Revenge of Fibonacci -- HDU -- 4099

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4099 要用c++交哦, G++ MLE 不是很懂,先粘上慢慢学习 代码: #include<std ...

  6. Hat's Fibonacci hdu 1250

    Problem Description A Fibonacci sequence is calculated by adding the previous two members the sequen ...

  7. hdu 2814 快速求欧拉函数

    /** 大意: 求[a,b] 之间 phi(a) + phi(a+1)...+ phi(b): 思路: 快速求欧拉函数 **/ #include <iostream> #include & ...

  8. HDU - 2814 Visible Trees

    题意: m*n(1<=m,n<=100000)的森林里,起始点在(1,1),某人从(0,0)点开始看,问能看到多少棵树. 题解: 求出1~x中的每个数与1~y的数中互质的数的总和.用素数筛 ...

  9. 【转载】ACM总结——dp专辑

    感谢博主——      http://blog.csdn.net/cc_again?viewmode=list       ----------  Accagain  2014年5月15日 动态规划一 ...

随机推荐

  1. hbase调优

    @ 目录 一.phoenix调优 1.建立索引超时,查询超时 2.预分区 hbase shell预分区 phoenix预分区 3.在创建表的时候指定salting. 4.二级索引 建立行键与列值的映射 ...

  2. 在JTable单元格上 加入组件,并赋予可编辑能力 [转]

    表格(单元格放置组件) 对于JTable单元格的渲染主要是通过两个接口来实现的,一个是TableCellRenderer另一个是TableCellEditor,JTable默认是用的是DefaultC ...

  3. IPv6 私有地址

    在互联网的地址架构中,专用网络是指遵守RFC 1918(IPV4)和RFC 4193(IPV6)规范,使用专用IP地址空间的网络.私有IP无法直接连接互联网,需要使用网络地址转换(Network Ad ...

  4. STM32一些特殊引脚做IO使用的注意事项

    1 PC13.PC14.PC15的使用 这三个引脚与RTC复用,<STM32参考手册>中这样描述: PC13 PC14 PC15需要将VBAT与VDD连接,实测采用以下程序驱动4个74HC ...

  5. Docker学习(三)——Docker镜像使用

    Docker镜像使用     当运行容器时,使用的镜像如果在本地中不存在,docker就会自动从docker镜像仓库中下载,默认是从Docker Hub公共镜像源下载. 1.镜像使用     (1)列 ...

  6. 【Linux】【Services】【SaaS】 kubeadm安装kubernetes

    1. 简介 2. 环境 2.1. OS:  CentOS Linux release 7.5.1804 (Core) 2.2. Ansible: 2.6.2-1.el7 2.3. docker: 2. ...

  7. JDBC(3):PreparedStatement对象介绍

    一,PreparedStatement介绍 PreperedStatement是Statement的子类,它的实例对象可以通过Connection.preparedStatement()方法获得,相对 ...

  8. matplotlib画直线图的基本用法

    一  figure使用 1 import numpy as np 2 import matplotlib.pyplot as plt 3 4 # 从-3到中取50个数 5 x = np.linspac ...

  9. 【C/C++】习题3-7 DNA/算法竞赛入门经典/数组与字符串

    [题目] 输入m组n长的DNA序列,要求找出和其他Hamming距离最小的那个序列,求其与其他的Hamming距离总和. 如果有多个序列,求字典序最小的. [注]这道题是我理解错误,不是找出输入的序列 ...

  10. kubeadm安装k8s集群

    安装kubeadm kubectl kubelet 对于Ubuntu/debian系统,添加阿里云k8s仓库key,非root用户需要加sudo apt-get update && a ...