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(isdigit(c)) { x=x*10+c-‘0‘; c=getchar(); }
    x*=f;
}
int main()
{
    int T;
    LL n,ans;
    scanf("%d",&T);
    while(T--)
    {
        read(n);
        ans=0;
        LL i=1,j;
        while(i<=n)
        {
            j=n/(n/i);
            ans+=(j-i+1)*(n/i);
            i=j+1;
        }
        printf("%lld\n",ans);
    }
}
时间: 2024-11-08 20:08:34

UVA 11526 H(n)的相关文章

uva 11526 H(n) (数论)

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

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)

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)

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

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&

是慷衫航在氖春怀僮步迂AXi

如果说下水道是一个城市的良心,那么厕所就是一座城市的门脸. 很多年前,人们就发现一个有意思的现象:一个城市的文明程度可以从其厕所的卫生程度得出,厕所越干净.城市越发达.但直到今天,大数据无法解释这背后的原因:究竟是城市发达了厕所自然就干净了,还是厕所干净了也会促进城市的发展. 对于这样「先有鸡还是先有蛋的问题」,还需要大数据加传统民调和小数据的结合才有肯能找到答案. 01 谷歌为何只猜对了一次? 感谢从维克托·迈尔-舍恩伯格到马云的孜孜不倦地布道,大数据现在几乎成了全球先进生产力的标志,而且几乎

UVA 12563 Jin Ge jin Qu [h] ao 劲歌金曲 (01背包)

每首只能唱一次,而且中间不能不唱歌,所以先把状态赋值为-1,以区别合法状态和非法状态,在唱歌曲目最多的条件下,离开时间应该尽量晚. 状态定f[c]表示唱歌时间为c的最大唱歌曲目 #include<bits/stdc++.h> using namespace std; const int maxn = 55; const int maxt = 180*maxn+679; int f[maxt]; const int JinGe = 678; int main() { //freopen(&quo

H - Going in Cycle!! (UVA - 11090)

- 题目大意 给你一个有向图,问你定义一个环的平均值为这个环上所有边的平均值,问你最小的环的平均值是多少. - 解题思路 先利用spfa来判断负环,然后用二分去判断若当前的二分值是mid,让所有的边都减去这个值,如果此时图中出现负环,则说明有环的平均值比这个更小. - 代码 #include<cstdio> #include<algorithm> #include<queue> #include<vector> #include<cstring>

UVA 11014 - Make a Crystal(容斥原理)

UVA 11014 - Make a Crystal 题目链接 题意:给定一个NxNxN的正方体,求出最多能选几个整数点.使得随意两点PQ不会使PQO共线. 思路:利用容斥原理,设f(k)为点(x, y, z)三点都为k的倍数的点的个数(要扣掉一个原点O).那么全部点就是f(1),之后要去除掉共线的,就是扣掉f(2), f(3), f(5)..f(n).n为素数.由于这些素数中包括了合数的情况,而且这些点必定与f(1)除去这些点以外的点共线,所以扣掉.可是扣掉后会扣掉一些反复的.比方f(6)在f