【JZOJ】【數論】數列

題意

有一個等差數列和一個等比數列,等差數列頭爲a,公差爲b,等比數列頭爲c,公倍爲d ,求在1 1~upperBound$$之間有多少個數在等差數列或等比數列中,不能重複

樣例

輸入

1 1 1 2 1000

輸出

1

思路

ifif語句判斷出合法的等差和等比數列,再用ansans統計,最後求出項,項的求法:

(a()+e)(a(首項)+e(尾項))÷÷b+1b+1

代碼

#include<cstdio>
#include<iostream>
using namespace std;
long long i,a,b,c,d,n;
int main()
{
	freopen("shulie.in","r",stdin);
	freopen("shulie.out","w",stdout);
	scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&n);
	long long ans=0;
	if (d!=0 && d!=1) {
		for (i=c; i<=n; i*=d) {
			if (i<a||(i-a)%b!=0) ans++; //記錄等比數列的數
		}
	}
	else if (c<a && c<=n || (c-a)%b!=0 && c<=n) ans=1;
	if (a<=n) ans+=(n-a)/b+1;//算等差數列的項數
	printf("%lld",ans);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章