题意
给出一个等差数列,第一项是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;
}