于是又要迎来洛谷那凌然无言以对的题目摘要= =
本题地址: http://www.luogu.org/problem/show?pid=1403
输入一行,一个整数n
输出格式:输出一个整数,表示总和
3输出样例#1:
5
这道题直接枚举每个数的因数一定是超时的
我们不妨这样想:对于n=10,10以内的数中,因数包括1的有10/1个,包括2的有10/2个,包括3得有10/3个……
以此类推,只要按照这个规律累加即可
代码:
#include <cstdio>
#include <algorithm> //copyright by t14t41t
#define ll long long
using namespace std;
const int a[6] = {0, 1, 3, 5, 8, 10};
ll f(int m)
{
if(m <= 5) return a[m];
ll sum = 0;
int i;
for(i = 1; i * i <= m; ++i)
{
sum += m / i - i + 1;
}
return ((sum << 1) - i + 1);
}
int main()
{
int n;
scanf("%d", &n);
printf("%lld\n", f(n));
return 0;
}
版权声明:转载请注明出处 [ametake版权所有]http://blog.csdn.net/ametake欢迎来看
原文地址:http://blog.csdn.net/ametake/article/details/47808119