【发布时间】:2017-08-24 22:05:02
【问题描述】:
给定一个数字 A,我想找到 Ath 斐波那契数 是 3 的倍数,或者如果数字表示至少有 3 就可以了。
例子:
斐波那契 > 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ...
输入:1,输出:3;
3 是第一个 3 的倍数或有 3 的斐波那契数 它。
输入:3,输出:21;
21 是第三个斐波那契数,它是 3 的倍数或有 3 它。
编辑: 变量类型更改为 unsigned long long int 并在 Fibonacci 生成器上调整。感谢 @rcgldr 和 @Jarod42 的帮助!
我的代码:
#include<bits/stdc++.h>
using namespace std;
int tem(unsigned long long int i){
while(i != 0){
if(i%10 == 3){
return true;
}
i = i/10;
}
return false;
}
int main(){
int a, count = 0;
unsigned long long int f1 = 1, f2 = 1;
while(scanf("%d", &a) != EOF){
for(unsigned long long int i = 2; i > 0; i++){
i = f1 + f2;
f1 = f2;
f2 = i;
if((i%3 == 0) || tem(i)){
count++;
if(count == a){
cout << i << endl;
break;
}
}
}
}
}
当 A > 20 时,它开始减速。有道理,因为它往往是指数的。我的代码效率不是很高,但是我没有找到更好的逻辑来使用。
我查看了这些链接,但没有找到结论:
有什么想法吗?感谢您的帮助!
【问题讨论】:
-
如果所讨论的数字不是太大,您可以使用比内公式计算第 n 个斐波那契数。见:maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/…
-
不是每4个数都可以被3整除吗?只有那些?
-
@mba12 有一些值得阅读的好东西;感谢您的链接!
-
@MSalters 是的。根据这个链接,我认为这是真的。 maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.html
-
if(i == (f1 + f2))?直接去i = fi + f2...