刷清橙OJ--A1067.Fibonacci数列整除问题

来源:互联网 发布:mac app store 编辑:程序博客网 时间:2024/06/05 19:29
问题:
A1067. Fibonacci数列整除问题
时间限制:1.0s   内存限制:512.0MB  
总提交次数:3360   AC次数:620   平均分:52.06
问题描述
  已知四个数:a,b,c,d,判断在第s个Fibonacci数到第t个Fibonacci数之间哪些数既不是a也不是b也不是c也不是d的倍数。
输入格式
  第一行两个数,s,t,表示要判断第s个Fibonacci数到第t个Fibonacci数之间(包含第s个和第t个)的Fibonacci数。
  第二行四个数,a,b,c,d,意义如题目描述。
输出格式
  一行若干个数,A1,A2,A3...An,从小到大排列,表示第Ai个Fibonacci数既不是a也不是b也不是c也不是d的倍数。
  每两个数之间用空格隔开。
样例输入
1 5
2 3 5 7
样例输出
1 2
数据规模和约定
  1<=s<=t<=10000, 1<=a,b,c,d<=10000
代码:
#include<iostream>using namespace std;int main(){    int s,t,a,b,c,d;    cin>>s>>t>>a>>b>>c>>d;    int f[10005][5];    if(s==1) cout<<1<<" "<<2<<" ";    else if(s==2) cout<<2<<" ";    f[1][1]=f[1][2]=f[1][3]=f[1][4]=f[2][1]=f[2][2]=f[2][3]=f[2][4]=1;    for(int i=3;i<=t;i++)    {        f[i][1]=(f[i-1][1]+f[i-2][1])%a;        f[i][2]=(f[i-1][2]+f[i-2][2])%b;        f[i][3]=(f[i-1][3]+f[i-2][3])%c;        f[i][4]=(f[i-1][4]+f[i-2][4])%d;        if(i>=s&&f[i][1]&&f[i][2]&&f[i][3]&&f[i][4]) cout<<i<<" ";    }    cout<<endl;    system("pause");    return 0;}

个人想法:代码来自试题讨论,我啥时候才能自己完成一道题啊。。