递归、64位整数及模运算的循环周期(杭电1005)
2013-02-04 12:33
295 查看
#include<iostream>
using namespace std;
int a,b;
int f(int n){
if(n==1||n==2)
return 1;
else
return (a*f(n-1)+b*f(n-2))%7;
}
int main(){
while(cin>>a>>b){
__int64 c;//64位整数,相当于long long
scanf("%I64d",&c);//不能使用cin进行输入,要用%I64d
if(a==0&&b==0&&c==0)
break;
int n;
n=c%49;//简单递归应为模运算中(a+b)%p=(a%p+b%p)%p;所以循环周期为7*7=49;最重要的一点
cout<<f(n)<<endl;//c(即n)为0时,f(n)无法有n-1和n-2,程序出错退出
}
return 0;
}
using namespace std;
int a,b;
int f(int n){
if(n==1||n==2)
return 1;
else
return (a*f(n-1)+b*f(n-2))%7;
}
int main(){
while(cin>>a>>b){
__int64 c;//64位整数,相当于long long
scanf("%I64d",&c);//不能使用cin进行输入,要用%I64d
if(a==0&&b==0&&c==0)
break;
int n;
n=c%49;//简单递归应为模运算中(a+b)%p=(a%p+b%p)%p;所以循环周期为7*7=49;最重要的一点
cout<<f(n)<<endl;//c(即n)为0时,f(n)无法有n-1和n-2,程序出错退出
}
return 0;
}
相关文章推荐
- Javascript输出1到100的整数,不用循环,不用递归
- 不用循环,不用递归,输出1到100的整数
- 杭电ACM OJ 1013 Digital Roots 如何用递归优雅地把一个未知长度的长整数的每一位拆分出来
- 初步实现无循环(则递归)将任意整数转任意进制字符串
- 杭电ACM OJ 1005 Number Sequence 简单却重要的公式题 完美考察了递归思想
- 杭电2017新生赛1005-整数的Alvin值
- 杭电oj1021 四个一周期 递归超限
- 初步实现无循环(则递归)将任意整数转任意进制字符串
- 判断是否为2的幂||输出一个整数二进制格式中1的个数 非循环非递归实现
- 不用循环,不用递归,输出1到100的整数
- 不用循环,不用递归,输出1~1000的整数
- 不用循环,不用递归,输出1到100的整数
- HDU 1005 Number Sequence(循环周期是关键)
- 杭电1005
- 递归求解整数的分划问题
- nyoj 571 整数划分(三)(递归)
- 【杭电oj】2092 - 整数解(数学推导)
- 再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类
- 杭电1005
- 杭电1028——整数拆分(递归实现)