loj#P6241. 性能优化 I

性能优化 I

题目描述

从前有个 Python 3 语言的程序是这样的:

ans = 0
n = int(input())
for i in range(1, n + 1):
	for j in range(1, n // i + 1):
		for k in range(1, j + 1):
			x = min(j, k)
			while not(j % x == 0 and k % x == 0):
				x = x - 1
			if x == 1:
				ans = (ans + 1) % 998244353
print(ans)

请注意:

  • Python 3 语言的 range 所指的区间是是左闭右开的;
  • // 代表舍去小数的除法

但是这个程序在 nn 不是很大的时候也会显得无能为力。所以你的任务就是优化这个程序的运行速度。

输入格式

第一行一个正整数 T T 表示数据组数。
接下来 T T 行每行一个正整数 n n 表示对程序输入的数。

输出格式

T T 行,对于每组数据输出程序应当输出的数。

3
3
1000000007
12345678909876543210
6
870325006
591139122

数据范围与提示

本题输入文件较大,请适当优化您的程序的读入速度。

本题共 10 10 个测试点。各个测试点详细信息如下:

测试点编号 T T\le n n\le
1 1 5000 5000 102 10^2
2 2 103 10^3
3 3 107 10^7
4 4
5 5 109 10^9
6 6 5000 5000 1018 10^{18}
7 7 50 50 101000 10^{1000}
8 8 500 500 1010000 10^{10000}
9 9 50 50 10100000 10^{100000}
10 10 5 5 101000000 10^{1000000}