当前位置: 首页 > news >正文

HDU-4473 Exam 数学分析

题意:给定一个数x,现在定义f(x)是a*b|x的情况下,a,b的组合情况有多少种。现在给定一个数N求f(1)+f(2)+...+f(N)。

解法:一开始想到了a*b是x的约数,因此推出了f(x)的公式,也就是这个公式,使得我们在求前缀和的道路上寸步难行......

正确的解法是对于任意一个a*b|c可以视为a*b*c = x,那么就把前缀和问题转化为a*b*c <= x的解的组合个数问题了。

三个数a,b,c先暂时不考虑其位置关系带来的不同,规定a<=b<=c,那么分情况讨论:

1.当a=b=c时有一种排列情况

2.当a=b<c时有三种排列情况

3.当a<b=c时有三种排列情况

4.当a<b<c时有六种排列情况

现在就是要枚举出这四种情况,通过学习,知道了一个高精度开方根的写法,说是高精度其实也就是进行一次可能的修正而已。

由于a是最小的一个数,所以有,通过枚举a之后,那么问题就转化为:,接着就能够枚举第2,3,4中情况了。对于第一种情况可以直接开立方求出。

注意求解的过程中要保证a,b,c的非递减关系。

代码如下:

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;

typedef long long LL;

inline int sqrt2(LL x) { // 高精度开平方 
    LL LIM = (int)pow(1.0*x, 1.0/2);
    while (LIM*LIM < x) ++LIM;
    while (LIM*LIM > x) --LIM;
    return LIM;
}

inline int sqrt3(LL x) {
    LL LIM = (int)pow(1.0*x, 1.0/3);
    while (LIM*LIM*LIM < x) ++LIM;
    while (LIM*LIM*LIM > x) --LIM;
    return LIM;
}

LL solve(LL N) {
    LL LIM = sqrt3(N), ans = LIM; // a=b=c的种数 
    for (int i = 1; i <= LIM; ++i) { // 至少有一个数小于
        LL ni = N / i, k = sqrt2(ni);
        ans += (ni/i + k - i*2)*3;
        // a=b<c的种数为ni/i-i    减去i都是为了保持非递减 
        // a<b=c的种数为k-i 
        for (int j = i+1; j <= k; ++j) {
            ans += (ni/j - j) * 6;
            // a<b<c的种数 
        }
    }
    return ans;
}

int main() {
    int ca = 0;
    LL N;
    while (scanf("%I64d", &N) != EOF) {
        printf("Case %d: %I64d\n", ++ca, solve(N));
    }
    return 0;    
}

 

转载于:https://www.cnblogs.com/Lyush/archive/2013/04/24/3041365.html

相关文章:

  • 通过iTunes检测更新,使用NSJSONSerialization解析JSON格式版本信息
  • jQuery页面滚动图片等元素动态加载实现
  • Java 聚合 组合 is-a has-a 关系学习
  • ZenCoding
  • nginx下使用Django
  • 五款超实用的开源SVG工具
  • solr dataimport 数据导入源码分析(十二)
  • secucrt相关技巧
  • [经典语录][电影]全民情敌/Hitch
  • iPhone私有API学习笔记
  • NS2源码图示---物理层 (转帖)
  • 火狐浏览器的一些常用设置
  • 代码行统计脚本.
  • Python property
  • 图的遍历(深度优先遍历)- 数据结构和算法59
  • 4个实用的微服务测试策略
  • 5、React组件事件详解
  • Angular4 模板式表单用法以及验证
  • FastReport在线报表设计器工作原理
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • k8s如何管理Pod
  • 初识MongoDB分片
  • 番外篇1:在Windows环境下安装JDK
  • 前端之React实战:创建跨平台的项目架构
  • 如何编写一个可升级的智能合约
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微信小程序开发问题汇总
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • C# - 为值类型重定义相等性
  • 第二十章:异步和文件I/O.(二十三)
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​学习一下,什么是预包装食品?​
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #数学建模# 线性规划问题的Matlab求解
  • (附源码)ssm高校实验室 毕业设计 800008
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (实战篇)如何缓存数据
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net分布式压力测试工具(Beetle.DT)
  • :O)修改linux硬件时间
  • @Documented注解的作用
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @vue/cli 3.x+引入jQuery
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [16/N]论得趣
  • [BZOJ4566][HAOI2016]找相同字符(SAM)
  • [C++] new和delete
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  • [codeforces] 25E Test || hash