2017年10月07日普及组 数列

这里写图片描述

分析
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
a,b,c,d,up,ans:int64;
begin
    assign(input,'shulie.in');
    reset(input);
    assign(output,'shulie.out');
    rewrite(output);
    read(a,b,c,d,up);
    if a<=up then ans:=(up-a) div b+1;
    while c<=up do
    begin
        if c<a then 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;
    write(ans);
    close(input);
    close(output);
end.

原文地址:https://www.cnblogs.com/YYC-0304/p/9500038.html