SSL_2391 数列

题意

给出一个等差数列,第一项是a,每次的项都是前一项加上b,再给出一个等比数列,第一项是c,每次的项都是前一项的d倍,求出1~n中有几个数字包含在这两个数列中。

思路

我们可以直接利用公式求出1~n中包含在等差数列里的个数(n-a)/b+1,然后我们枚举等比数列,只要我们枚举到的数减去a不是b的倍数就说明不在等差数列里面,我们就可以直接累加答案。

代码

#include<cstdio>
#include<iostream>
using namespace std;
long long a,b,c,d,up,ans;
int main()
{
    cin>>a>>b>>c>>d>>up;
    if (a<=up) ans=(up-a)/b+1;//等差数列里面的,a<=up防止掉坑
    while (c<=up)//枚举等比数列
    {
        if ((c-a)%b||c-a<0) ans++;//判断是否在等比数列里面,不然就统计
        c*=d;
        if (d==1) break;//d如果是1的话就会死循环下去,所以判断一下
    }
    cout<<ans;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值