JZOJ2700.数字 (Standard IO)

\[Description\]

5c2070f7598d6.png

\[Input/Output\]
5c2071151ce11.png
5c2071150fc7a.png

\[Sample\]

3
1 5
3 9
8 8
2
2
0

\[Data\ Constraint\]

5c207151e7bc9.png

思路:暴力。

首先我们考虑:

\[D_x=(x-1) \mod 9+1\]

然后再推出一个东西:

\[\text{如果 D(x) 合法,那么 D(x+k) 肯定合法}\]
\[k=LCM(1,2,3,4,5,6,7,8,9,10)=22680\]

预处理 \(1\)~\(k\) 的合法个数,查询的时候直接前缀和一下。

时间复杂度: \(O(Tk)\)

Const node_num=22680;

var
    bucket:array[-1..node_num] of boolean;
    tmp,test:longint;
    l,r:int64;

function D(x:int64):int64; begin exit((x-1) mod 9+1); end;

procedure Init;
var i:longint;
begin
    fillchar(bucket,sizeof(bucket),True);
    for i:=1 to node_num do if (i*D(i)<=node_num)and(bucket[i*D(i)]) then
    begin
        inc(tmp); bucket[i*D(i)]:=False;
    end;
end;

function Slove(x:int64):int64;
var i:longint;
begin
    Slove:=0;
    for i:=1 to x mod node_num do if bucket[i]=False then inc(Slove);
    inc(Slove,x div node_num*tmp);
end;

begin
    Init; read(test);
    while test>0 do
    begin
        read(l,r); dec(test);
        writeln(Slove(r)-Slove(l-1));
    end;
end.

转载于:https://www.cnblogs.com/FibonacciHeap/articles/10168178.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值