View Code of Problem 3887

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

typedef long long LL;
const LL mod = 1e9 + 7;
const int N = 100005;

int n, m;

LL res[12];
int a[12];

int Find(int left, int val)
{
	int right = n, mid;
	while (left <= right)
	{
		mid = (right + left) / 2;
		if (n / mid<val) right = mid - 1;
		else left = mid + 1;
	}
	return right;
}

int main()
{
	int q;
	scanf("%d", &q);
	while (q--)
	{
		scanf("%d", &n);
		LL res = 0;
		for (int i = 1; i <= n; i++)
		{
			int val = n / i;
			int j = Find(i, val);
			res += val*(j - i + 1);
			i = j;
		}
		printf("%lld\n", res);
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 3887