列表

详情


NC17450. 因数个数和

描述

q次询问,每次给一个x,问1到x的因数个数的和。

输入描述

第一行一个正整数q ;
接下来q行,每行一个正整数 x

输出描述

共q行,每行一个正整数表示答案

示例1

输入:

4
1
2
3
10

输出:

1
3
5
27

说明:

1的因数有1

2的因数有1,2

3的因数有1,3

以此类推

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 484K, 提交时间: 2018-08-24 19:32:16

#include<bits/stdc++.h>
using namespace std;
int main(){
	int q;
	cin>>q;
	while(q--){
		int n;
		cin>>n;
		long long sum=0;
		for (int i=1;i<=sqrt(n);i++)
			sum+=n/i;
		cout<<2*sum-((int)sqrt(n))*((int)sqrt(n))<<endl;
	}
}

C++ 解法, 执行用时: 5ms, 内存消耗: 416K, 提交时间: 2022-07-13 10:07:51

#include<bits/stdc++.h>
using namespace std;

typedef long long s64;

int main()
{
	int tt;
	cin>>tt;
	while(tt--)
	{
		int n;
		cin>>n;
		s64 ans=0;
		for(int x=1;x*x<=n;++x)ans+=(n/x-x)*2+1;
		cout<<ans<<endl;
	}
}

Python3(3.5.2) 解法, 执行用时: 411ms, 内存消耗: 3556K, 提交时间: 2019-02-10 13:24:05

q = int(input())
for u in range(q):
    n = int(input())
    l= 1
    ans = 0
    while l <= n:
        r = n // (n // l)
        ans += (r - l + 1) * (n // l)
        l = r + 1
    print(ans)

上一题