数列
给你五个数,a、b、c、d、na、b、c、d、na、b、c、d、n,代表以aaa开头bbb为公差的等差数列和以ccc开头ddd为倍数的等比数列,求有多少个数小于nnn且在等差数列或等比数列
输入
输入样例#1
1 1 1 2 1000
输入样例#2
3 3 1 2 1000
输入样例#3
452 24 4 5 600
输出
输出样例#1
1000
输出样例#2
343
输出样例#3
10
样例解释#1
有1、2、3、4、5……999、10001、2、3、4、5……999、10001、2、3、4、5……999、1000
样例解释#3
有4、20、100、452、476、500、524、548、572、5964、20、100、452、476、500、524、548、572、5964、20、100、452、476、500、524、548、572、596
思路
找公式
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
long long a,b,c,d,n,m,t,tot;
int main()
{
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&n);
if(a<=n)tot=(n-a)/b+1;//直接求出有多少个在数小于n且在等差数列
t=c;
if((d==0 || d==1) && c<=n)tot++;//特判1和0
else
while(t<=n)
{
if(((t%b)+b*(a/b)!=a && t>=a) || t<a)++tot;//通过哦的努力退出来了
t*=d;
}
printf("%lld",tot);
fclose(stdin);
fclose(stdout);
return 0;
}