备战Noip2018模拟赛5(B组)T3 Num 约数研究

10月4日备战Noip2018模拟赛5(B组)

T3 Num约数研究

题目描述

F(n)的表示Ñ的约数个数,现在给出N,要求求出的F(1)到F(N)的总和。

输入格式

输入一行,一个整数n

输出格式

输出一个整数,表示总和

输入样例

3

输出样例

5

数据范围

20%N <= 5000

100%N <=千万

暴力?打表?

考试时有人将所有数据都打表,程序放在旁边跑了据说一个小时,电解金属锰...

嗯..这道题其实是一道数学问题,把公式推出来就可以了

先上公式

\ sum_ {i = 1} ^ {n} f(i)= \ sum _ {i = 1} ^ {n} n / i

那么这个公式是怎么推出来的呢?

的尴尬自问自答

\ sum_ {I = 1} ^ {N} F(1)中1的个数为所有是1倍数的数,也就是n / i,那么同理可得2的个数是所有2的倍数的数,也就是n / 2,所以,以此类推,就得到了上面的公式了,其实打个表找找规律也是费劲简单的,打表暴力的代码就不贴了,支持打表正解(•ω•),

代码

#include <iostream>
#include <cstdio>

using namespace std;

int n, i, tot;

int main ()
{
	//freopen ("num.in", "r", stdin);
	//freopen ("num.out", "w", stdout);
	
	cin >> n;
	
	for (i = 1; i <= n; i ++){
		tot = tot + n / i;             //公式的实现
	} 
	
	cout << tot;
	
	//fclose (stdin);
	//fclose (stdout);
	return 0;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值