題目描述
給定乙個等差數列,第一項是a, 從第二項開始,每項與前一項的差都是乙個定值b。如果用數學形式來表示,那麼可以表示成 a + b × x , 其中 x≧0,且是整數。例如: a = 1, b=2, 那麼這個等差數列就是:1,3,5,7,9…
再給定乙個等比數列,第一項是c, 從第二項開始,每項是前一項的d倍。如果用數學形式來表示等比數列,則是 c ×(dy)。 其中 y≧0, 且是整數。例如: c = 2, d = 3, 那麼這個等比數列就是:2,6,18,54…
你的任務是計算在1至upperbound內的正整數,有多少正整數是「合法」的?
所謂的「合法」是指:該整數屬於上面給定的等差數列的某項或者屬於等比數列的某項,或者既屬於等差數列的項也屬於等比數列的項。
輸入一行,5個整數,分別是a,b,c,d,upperbound。
(1≤a,b,c,upperbound≤1012, 1≤d≤105。)
對於80%的資料,1≤upperbound≤1000000。
輸出乙個整數,表示「合法」正整數的個數。
樣例輸入
1 1 1 2 1000
樣例輸出
題解;
1.等差數列因為2個數之間的值是固定值b,若a<=u就可以直接求出a~u之間等差數列的數量(u-a) div b+1。
2.等比數列直接做就好了,因為是逐級乘法,所以速度挺快的,不過要判斷*1的情況,如果等比數列某項c小於等差數列的初始項a就一定不在等差數列中,這時候就可以累加了,c=a的時候在等差數列中已經累加過了,如果c>a的話就判斷(c-a) mod b等不等於0,等於0就是在等差數列中,這時候不累加,否則累加。
var
ans,a,b,c,u:int64;
d:longint;
begin
readln(a,b,c,d,u);
if a<=u
then ans:=(u-a) div b+1;
while c<=u do
begin
if cthen inc(ans)
else
if c>a then
if (c-a) mod b<>0
then inc(ans);
c:=c*d;
if d=1
then
break;
end;
writeln(ans);
end.
jzoj P1330 迎接儀式
給出乙個不和諧的佇列,用 j 替代 教 z 替代 主 而乙個 j 與 z 組成的序列則可以描述當前的佇列。為了讓教主看得盡量舒服,你必須調整佇列,使得 jz 子串盡量多。每次調整你可以交換任意位置上的兩個人,也就是序列中任意位置上的兩個字母。而因為教主馬上就來了,時間僅夠最多作k次調整 當然可以調整...
jzoj P1331 超級教主
lhx教主很能跳,跳需要消耗能量,每跳1公尺就會消耗1點能量。教主為了收集能量,來到了乙個神秘的地方,教主的正上方每100公尺處就有乙個能量球 也就是這些能量球位於海拔100,200,300 公尺處 每個能量球所能提供的能量是不同的,一共有n個能量球 也就是最後乙個能量球在n 100公尺處 教主為了...
jzoj P3796 議案決定
國王手下有m個大臣,他們有一天對國王要處理的n件事務進行投票。每個大臣可以對兩件事務贊成或反對,格式如下 x c x y c y表示這個大臣對事務x的態度為c x,對事務y的態度為c y。如果國王的決定和某個大臣的兩個意見都不同,那麼這個大臣就會離開國王。小c認為不能讓任何乙個大臣離開國王,否則國王...