UVA - 11526 - H(n)(思路,减少枚举量)

题意:给定在32位带符号整数范围内的n,求n/1+n/2+n/3+n/4+……+n/n = ?

因为损失精度,所以算出来的有些连续的项是相同的数值,故想办法找出对于某个值,哪一段范围均是这个值。

详见代码注释

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<deque>
#include<queue>
#include<stack>
#include<list>
#define fin freopen("in.txt", "r", stdin)
#define fout freopen("out.txt", "w", stdout)
#define pr(x) cout << #x << " : " << x << "   "
#define prln(x) cout << #x << " : " << x << endl
#define Min(a, b) a < b ? a : b
#define Max(a, b) a < b ? b : a
typedef long long ll;
typedef unsigned long long llu;
const int INT_INF = 0x3f3f3f3f;
const int INT_M_INF = 0x7f7f7f7f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
const ll LL_M_INF = 0x7f7f7f7f7f7f7f7f;
const double pi = acos(-1.0);
const double EPS = 1e-6;
const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
const ll MOD = 1e9 + 7;
using namespace std;

#define NDEBUG
#include<cassert>
const int MAXN = 100 + 10;
const int MAXT = 10000 + 10;

int main(){
    ll n;
    int T;
    scanf("%d", &T);
    while(T--){
        scanf("%lld", &n);
        ll sum = 0;
        for(ll i = 1; i <= n;){
            ll value = n / i;       //此时需要找的值为value
            ll lur = n / value;     //n中最多包含lur个value,向下取整(因为不能是小数)
            sum += (lur - i + 1) * value;      // i ~ lur 范围内的值均是value
            i = lur + 1;            //减少枚举量
        }
        printf("%lld\n", sum);
    }
    return 0;
}
时间: 2024-11-09 06:34:45

UVA - 11526 - H(n)(思路,减少枚举量)的相关文章

UVA - 11526 H(n) (数学)

[题目链接]:click here~~ [题目大意] What is the value this simple C++ function will return? long long H(int n){ long long res = 0; for( int i = 1; i <= n; i=i+1 ){ res = (res + n/i); } return res; } Input The first line of input is an integer T (T ≤ 1000) tha

uva 11526 H(n) (数论)

转载自 http://blog.csdn.net/synapse7/article/details/12873437 这道题我自己做的时候没有想到好的优化方法,提交的时候借鉴这篇文章的内容,转载如下: -----------------------------------------------------------------------------------------------------------------------------------------------------

Uva1363(余数性质/减少枚举量)

题意: 输入正整数n和k(范围均为1e9),求∑(k mod i),i从1~n 解法: 首先这道题直接暴力亲测会超时. 之后我们写几组数据之后可以发现当k/i的商相同的时候他们的余数成一个等差数列,而且数列首相是q,公差是p,项的个数是余数/商. 具体写法网上面有分情况讨论的,但是较为繁琐,这里LRJ的板子感觉写法就很精炼. 我们从左到右依次枚举每一项i(核心思想是减少i的枚举个数),计算出k除以这个数的商和余数, 如果这个商是0,说明此时的i已经大于k:如果不为0(即大于0),即来计算等差的数

【数论】UVa 11526 - H(n)

What is the value this simple C++ function will return? 1 long long H(int n) 2 3 { 4 long long res = 0; 5 for( int i = 1; i <= n; i=i+1 ) 6 7 { 8 res = (res + n/i); 9 } 10 return res; 11 } Input The first line of input is an integer T (T ≤ 1000) that

UVA 11526 H(n)

https://cn.vjudge.net/problem/UVA-11526 除法分块 #include<cstdio> #include<iostream> using namespace std; typedef long long LL; void read(long long &x) { x=0; char c=getchar(); int f=1; while(!isdigit(c)) { if(c=='-') f=-1; c=getchar();} while

【数论,找规律】Uva 11526 - H(n)

原来做过的题再看还是没想出来,看来当时必然没有真正理解.这次回顾感觉理解更透彻了. 网上的题解差不多都是一个版本,而且感觉有点扯.根据n=20猜出来的? 好吧哪能根据一个就猜到那么变态的公式.其实这题稍微找下规律就好.当然可能没有公式法效率高,但理解起来更容易吧. 你用n=20的例子,那么我也用.但我的想法是这样的. sum = 0; 我们考虑 i 是多少时 n/i = 1: 20/1 = 20, 故i <= 20, 又20/2 = 10,  故i > 10, 即 10 < i <

UVA - 11374 Airport Express (Dijkstra模板+枚举)

Description Problem D: Airport Express In a small city called Iokh, a train service, Airport-Express, takes residents to the airport more quickly than other transports. There are two types of trains in Airport-Express, the Economy-Xpress and the Comm

SSH---Spring减少配置量将公共的配置进行抽象

SSH---Spring减少配置量将公共的配置进行抽象 最近做项目的过程中遇到一个关于Spring配置特别基础的问题--减少配置量将公共的配置进行抽象.为此特地翻看以前看过的视频刚好有类似的Demo,所以就借用一下分享给大家. 抽象前 配置文件大致如下(只将可以抽象的地方贴出来): <bean id="bean2" class="com.tgb.spring.Bean2"> <property name="id"value=&q

前端程序员的蜕变——JS的 event 对象属性、使用实例、兼容性处理(极大提高代码效率、减少代码量)

下面讨论一下 js 中的 Event 对象,主要从以下三个方面详细的描述(点击标题可跳转到对应部分): 1.什么是event 2.怎么用event,用他该注意什么,几个简单实际应用 3.event在不同浏览器的存在的兼容问题,及如何去解决  1.  什么是event Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态等等.说的通俗一点就是,event是JS的一个系统内置对象.平时无法使用,当DOM元素发生按键.鼠标等等各种事件时,系统会自动根据D