HDU_1021_费布拉切变形

Fibonacci Again

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 50863    Accepted Submission(s): 24079

Problem Description

There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2).

Input

Input consists of a sequence of lines, each containing an integer n. (n < 1,000,000).

Output

Print the word "yes" if 3 divide evenly into F(n).

Print the word "no" if not.

Sample Input

0
1
2
3
4
5

Sample Output

no
no
yes
no
no
no

一来想把数列所有值计算出来,发现数值增长实在太快,到几百的规模时longlong就溢出了。

然后自己推了一下发现,(a+b)%c==(a%c+b%c)%c,这应该是取模运算的性质。 然后就过了。

#include<iostream>
#include<cstdio>
using namespace std;
#define LL long long

int f[1000005];
int main()
{
    f[0]=1;
    f[1]=2;
    int t=2;
    while(t<1000005)
    {
        f[t]=(f[t-1]+f[t-2])%3;
        t++;
    }
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        if(f[n]==0)
            printf("yes\n");
        else
            printf("no\n");
    }
    return 0;
}
时间: 2024-10-07 07:01:21

HDU_1021_费布拉切变形的相关文章

hdu 2516(斐波拉切博弈)

题意:容易理解. 分析:通过枚举寻找规律,这就是做1堆或者2堆石子博弈的技巧!当为2或者3时,肯定是第二个人赢,当为4时,先去一个石子,然后当对方面临3,于是第一个人赢, 当为5时,取1时,第二个人赢,取2时也是第二个人赢...,于是为5时也是滴二个人赢...多枚举几个之后就会发现只要满足斐波拉切数列的都是第二个人赢,其它的 则是第一个人赢! 代码实现: #include<stdio.h> #include<string.h> int main() { int n,i,t1,t2,

js中斐波拉切数的三种写法;

js中斐波拉切数的三种写法: function factorial(num){ if(num <=1){ return 1; }else{ return num* factorial(num-1); } } console.log(factorial(5));//120 面这个函数的执行与函数名紧紧耦合在了一起,可以使用arguments.callee可以消除函数解耦 第二种(在严格模式下,访问这个属性会抛出TypeError错误) function factorial(num){ if(num

Java程序设计之裴波拉切那数列(兔子一年的数量)

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 典型的裴波拉切那问题不多说了,直接上代码好了. import java.util.ArrayList; public class SecondThread{ static ArrayList<Integer> list = new ArrayList(); int num

斐波拉切字符串统计个数 Fibonacci String

Problem:  s0 = "a", s1 = "b", s2 = "ba", s3 = "bab", s4 = "babba", s4 = "babbabab", is called Fibonacci string. For the string with index n, given a string str = "bb", calculate how man

Python——从连续赋值到斐波拉切数列

Python中有一个非常简洁的赋值语句用法,就是连续赋值. 要分别给两个变量赋值,我的第一念头是如下: 1 a = 1 2 b = 2 但其实python还提供了一种更简洁的写法如下 1 a , b = 1 , 2 这时我们很自然的就能理解为按顺序赋值,a = 首位数字1,b = 次位数字2.但实际上并不仅仅如此. 连续赋值语句中等式右边其实都是局部变量,而不是真正的变量值本身.当等号右边是定值时,这样做当然没有问题.但是如果右边是一个含有变量的表达式,那么赋值时会采用截至本句代码前一句为止,各

斐波拉切

第一种方法: public class Fibonacci2{  //定义数组方法 public static void main(String[] args) {  int arr[] = new int[20];  arr[0] = arr[1] = 1;  for (int i = 2; i < arr.length; i++) {   arr[i] = arr[i - 1] + arr[i - 2]; }  System.out.println("斐波那契数列的前20项如下所示:&

HDU1787 GCD Again【欧拉函数】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1787 题目大意: 给你一个整数N,求范围小于N中的整数中,与N的最大公约数大于1的整数的个数. 思路: 典型的欧拉函数变形.欧拉函数φ(N)是用来求小于N的整数中,与N的最大公约数为1的数的个数. 那么此题的答案ans = N - φ(N) - 1. AC代码: #include<iostream> #include<algorithm> #include<cstdio>

Fibonacci数

Fibonacci数 描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为F(n)=1 ...........(n=1或n=2)F(n)=F(n-1)+F(n-2).....(n>2)现要你来求第n个斐波纳奇数.(第1个.第二个都为1) 输入 第一行是一个整数m(m<5)表示共有m组测试数据每次测试数据只有一行,且只有一个整形数n(n<20) 输出 对每组输入n,输出第n个Fibonacci数 实现: package July;

hdu 4893 (多校1007)Wow! Such Sequence!(线段树&amp;二分&amp;思维)

Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 352    Accepted Submission(s): 104 Problem Description Recently, Doge got a funny birthday present from his new friend, Prot