中位因数
题号:NC206076
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给出函数的定义如下:
f(x)是所有能够整除 x 的数(包含 1 和 x )中的中位数向下取整的大小,

输入描述:

输入包含多组数据,第一行为一个数字  ,表示测试数据组数。
接下来是 T 组数据,每组数据为一行,包含一个整数

输出描述:

每组数据输出包含一个整数,表示 g(x) 的值,结果要求对 1e9+7 取模。

示例1

输入

复制
3
1
2
3

输出

复制
1
2
4

说明

能够整除 1 的数字有 1 ,故 f(1)=1;
能够整除 2 的数字有 1,2 所以中位数为\lfloor \frac{1+2}{2} \rfloor = 1,故 f(2) = 1;
能够整除 3 的数字有 1,3 ,所以中位数为\frac{1+3}{2}=2 ,故 f(3) = 2;
从而得出 g(1) = 1,g(2) = 2,g(3) = 4 。
示例2

输入

复制
1
1000000

输出

复制
677045223