(eden)性能评估

题目描述:Amtel has announced that it will release a 128-bit computer chip by 2010, a 256-bit computer by 2020, and so on, continuing its strategy of doubling the word-size every ten years. (Amtel released a 64-bit computer in 2000, a 32-bit computer in 1990, a 16-bit computer in 1980, an 8-bit computer in 1970, and a 4-bit computer, its first, in 1960.)

Amtel will use a new benchmark - the Factstone - to advertise the vastly improved capacity of its new chips. The Factstone rating is defined to be the largest integer n such that n! can be represented as an unsigned integer in a computer word.

输入:Given a year 1960 ≤ y ≤ 2160, what will be the Factstone rating of Amtel‘s most recently released chip?

输出:For test, there is one line of input containing y.  For each test case, output a line giving the Factstone rating.

示例

输入: 1960

输出: 3

(解释:因为1960年计算机是支持4位,其中的最大的无符号数为(全为1):15;3的阶乘为6,4的阶乘为24,故这里的n=3)

Hint:

1.取对数避免大数计算,log(n*m) = log(n) + log(m)。

2.准确理解题意。

思路

y = y / 10 - 194;

求得2^y这个指数,得到该年应该得到多少位的机,然后2^(2^y) - 1即该年的最大无符号整数,但由于直接这样计算得到的数为inf无穷大,即计算机装不下,所以要经过处理,本来是得到2^(2^y) - 1即该年的最大无符号整数这个之后,判断它在哪两个阶乘范围之内n!~(n+1)!,然而这样计算又还要写阶乘函数,又有判断循环,耗时,所以采用

p! < 2^2^y
两边取对数
log(1)+log(2)+...+log(p) < (2^y)*log(2)
即采用whlie循环一直加直到加到某一个p0超过了后面则出循环,p0 - 1即为所求p

因为如果直接用(log(2^(2^y) - 1))会超过int float double类型的范围,所以只能够这样将减一忽略不计,因为并不会影响,从而得到只需要计算2^y即可;

代码

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main() {
 4     int y, i;
 5     scanf("%d", &y);
 6     y = y / 10 - 194;
 7     double k = pow(2, y);
 8     i = 1;
 9     double tot = log(1);
10     while (tot < k * log(2)) {
11         i++;
12         tot = tot + log(i);
13     }
14     printf("%d\n", i - 1);
15 }

标答

 1 // from younglee.
 2 #include<stdio.h>
 3 #include<math.h>
 4 int main(void) {
 5     int year, num, n = 2;
 6     double sum = 0;
 7     // for input
 8     scanf("%d", &year);
 9
10     // for processing.
11     num = pow(2, (year - 1960)/10 + 2);//也是求Index
12     while (sum <= num) {
13         sum += log(n) / log(2);//把log(2)移到另一边
14         ++n;
15     }
16
17     // for output.
18     printf("%d\n", n - 2);//因为最后还加了1
19     return 0;
20 }

问题

①方法上面可以取对数以代替阶乘判断;

②要注意k是浮点数tot也是,不能够直接这样,k还是会很大的,装不下,所以要把减一舍去取对数,从而简化,

否则会出现这个情况;

需要学习

①思路,简化的方法;

②inf,nan。

时间: 2024-12-11 02:26:35

(eden)性能评估的相关文章

[下篇] 一篇文章详解性能评估难点

在这个娱乐明星频频出轨.奇葩热文爆炸的时代,你却能抽空关注IT技术,请为你这份难能可贵和对技术的执着点个赞吧!请搜索"ICT_Architect"关注微信公众号,获取更多精彩内容. 在上篇文章[收藏] 深入浅出存储性能评估方法论中,我们介绍了性能评估相关概念和原理,但是在项目实战中,要根据业务真实诉求给出切合实际的性能配置,还需要针对业务模型进行最佳实践分析和洞察,从主机端口.存储系统.后端磁盘等端到端进行分析和评估,在本文中把常见的性能评估过程中的难点依次罗列,希望对大家有所帮助.

Linux服务器性能评估与优化(一)

网络内容总结(感谢原创) 1.前言简介 一.影响Linux服务器性能的因素 1. 操作系统级 性能调优是找出系统瓶颈并消除这些瓶颈的过程. 很多系统管理员认为性能调优仅仅是调整一下内核的参数即可解决问题, 事实上情况并不是这样. 性能调优是实现操作系统的各个子系统之间的平衡性,这些子系统包括: ?       CPU ?       内存 ?       磁盘I/O带宽 ?       网络I/O带宽 子系统之间相互依存,任何一个子系统的负载过度都能导致其他子系统出现问题,例如: * 大量的 p

机器学习:模型性能评估与参数调优

模型性能评估的常用指标 真阳性(True Positive,TP):指被分类器正确分类的正例数据 真阴性(True Negative,TN):指被分类器正确分类的负例数据 假阳性(False Positive,FP):被错误地标记为正例数据的负例数据 假阴性(False Negative,FN):被错误地标记为负例数据的正例数据 精确率=TP/(TP+FP),TP+FP是模型预测的正样本总数,精确率衡量的是准确性: 召回率=TP/(TP+FN),TP+FN是真实的正样本总数,召回率衡量的是覆盖率

常用机器性能评估工具

杨海春,曾在从兴技术有限公司担任主要设计开发岗,熟悉移动计费系统整体系统架构.目前就职于腾讯计算机系统有限公司,担任工程师职位,熟悉日志计费系统,离线计算等场景. 软件系统跑在机器上,处理能力受硬件制约,所以,单机处理能力会有上限.评估机器处理能力的上限,检查程序的瓶颈在哪,有助于程序性能分析. 主要的几大硬件:CPU.内存.网络.磁盘.本文主要结合本人经验介绍这几大硬件的性能评估工具. 1.CPU性能评估 1.1 vmstat 工具 使用举例: vmstat 1 10 第一个参数:采样频率 第

性能评估思路总体

性能评估设计步骤: 1.陈述目标,定义系统.确定所设定的目标,建立软硬件系统,设定边界 2.列出所提供的服务和产出. 3.选择指标.通常这些指标与速度.准确度.可靠性有关. 4.列出变量.这一步列出有关影响性能的所有的变量,这列出第一遍的变量之后,好好再分析一下,再添加有关的其他变量,这些变量尽可能通俗易懂. 5.选择因素来研究.在小4中列出的变量分为在性能分析中可变和不变量,我们把这些可变量叫做因素,还有把那些不可变但是对于性能影响较大的变量也叫做因素,也就是说影响到性能分析的变量,我们都可以

转贴---Linux服务器性能评估

http://fuliang.iteye.com/blog/1024360 http://unixhelp.ed.ac.uk/CGI/man-cgi?vmstat -------------------------------------------------------------------------------------------------------------------------------- 工作这么久了,主要就是服务器端的开发,由于业务性质,对于性能的考虑是每天不得不

linux性能评估与分析工具

linux是一个开源系统,其内核负责管理系统的进程,内存,设备驱动程序,文件和网络系统, 决定着系统的性能和稳定性.由于内核源码很容易获取,任何人都可以将自己认为优秀的代码 加入到其中.linux默认提供了很多服务,如何发挥linux的最大性能,如何精简系统以便适合 当前的业务需求,这需要对内核进行重新编译优化.影响linux性能的因素有很多,从底层硬件 到上层应用,每一部分都可以有优化的地方. linux性能评估与分析工具 影响linux服务器性能的因素有很多,从底层的硬件到操作系统,从网络应

模型的性能评估(二) 用sklearn进行模型评估

在sklearn当中,可以在三个地方进行模型的评估 1:各个模型的均有提供的score方法来进行评估. 这种方法对于每一种学习器来说都是根据学习器本身的特点定制的,不可改变,这种方法比较简单.这种方法受模型的影响, 2:用交叉验证cross_val_score,或者参数调试GridSearchCV,它们都依赖scoring参数传入一个性能度量函数.这种方法就是我们下面讨论的使用scoring进行模型的性能评估. 3:Metric方法,Metric有为各种问题提供的评估方法.这些问题包括分类.聚类

Linux服务器性能评估

一.影响Linux服务器性能的因素 1. 操作系统级 CPU 内存 磁盘I/O带宽 网络I/O带宽 2. 程序应用级 二.系统性能评估标准 影响性能因素 影响性能因素 评判标准 好 坏 糟糕 CPU user% + sys%< 70% user% + sys%= 85% user% + sys% >=90% 内存 Swap In(si)=0Swap Out(so)=0 Per CPU with 10 page/s More Swap In & Swap Out 磁盘 iowait %