格点统计
Description
Input
Output
Sample Input
输入1:
3
输入2:
4
Sample Output
输出1:
5
输出2:
8
Data Constraint
.
.
.
.
.
.
.
.
分析
这题就是让我们求,在一个坐标系里,有多少个坐标(x,y)相乘小于等于k,即:x*y<=k
当k=4时,所求点如下:
观察图,我们可以发现,对于第i行,它的个数是trunc(k/i),即k div i。
因此,我们可以枚举i(i=1 to k)来求ans,但由于k的数据过大,i=1 to k会超时。
.
.
.
.
让我们再仔细观察图 :
我们发现,当我们求出第一行时,第一列也会求出来
因此,我们有了一种想法:
枚举i( i=1 to trunc(sqrt(k)) )
每求出一行,就把数量乘2(因为会有重叠的地方,所以要减去重叠的地方再乘2)累加
记得取模
.
.
.
.
.
.
.
程序:
var
k,ans:qword;
i:longint;
begin
assign(input,'count.in');
reset(input);
assign(output,'count.out');
rewrite(output);
read(k);
ans:=0;
for i:=1 to trunc(sqrt(k)) do
ans:=(ans+(trunc(k/i)-(i-1))*2-1) mod 998244353;
write(ans);
close(input);
close(output);
end.