数列
题目大意:给出一个等差数列的初始值和差值还有一个等比数列的处值和比值,问不大于n的数中,问这两个序列中,有多少个数小于n(只要在一个序列中就行了,在两个序列中只记一次)
样例输入
1 1 1 2 1000
样例输出
1000
数据范围限制
1≤a,b,c,upperBound≤1012, 1≤d≤105。
对于80%的数据,1≤upperBound≤1000000。
提示
解题思路:
这道题枚举出两个序列是肯(ying)定(gai)不行的,我们可以知道,等差数列不大于n的数有(n-a)/b+1(特殊情况除外),n-a是指序列小于n的长度,除以b是总数,1是a这个数,然后枚举等比数列,判断i-a是否可以整除b,这是判断,他是否存在两个之中,存在就减去一,再加一些特判即可
#include<cstdio>
#include<iostream>
using namespace std;
long long a,b,c,d,n,ans;
int main()
{freopen("shulie.in","r",stdin);freopen("shulie.out","w",stdout);scanf("%lld %lld %lld %lld %lld",&a,&b,&c,&d,&n);if (d==1||(!d)){if ((c-a)%b!=0&&c<=n||c<a&&c<=n)ans=1;}elsefor (long long i=c;i<=n;i*=d){ans++;if (i>=a&&(i-a)%b==0)ans--;}if (n>=a) printf("%lld",ans+(n-a)/b+1);else printf("%lld",ans);fclose(stdin);fclose(stdout);return 0;
}