您的位置:首页 > 其它

uva 10916 Factstone Benchmark(打表)

2014-07-04 18:48 211 查看
题意是求 k ! <= 2 ^ n ,的最小k。

由于n比较大,大到 2 ^ 20 次方,所以 2 ^ 2 ^ 20比较难算,所以做一些基础的数学变换。

对不等式两边同时取log2,得:

log2(k ! ) <= log2(2 ^ n)= n,即:log2(1) + log2(2) + log2 (3) + log2(4) + ... + log2(k) <= n ,其中 n 为 2 ^1 , 2 ^2, 2 ^3 ...... 2 ^20。

然后打个表就行了。开始的时候用longlong,考虑到2的20次方应该装的下,结果不对,改用double。

代码:

#include <stdio.h>
#include <math.h>

int ans[] = {3, 5, 8, 12, 20, 34, 57, 98, 170, 300, 536, 966, 1754, 3210, 5910, 10944, 20366, 38064, 71421, 134480, 254016};

int main()
{
/*freopen("out.txt", "w", stdout);
double a = 2;
double b = 0;
for (int i = 1; i <= 21; i++)
{
a *= 2;
for (int j = 1; ; j++)
{
b += log2(j);
if (b > a)
{
printf("%d, ", j - 1);
b = 0;
break;
}
}
}*/
int year;
while (scanf("%d", &year) && year)
{
printf("%d\n", ans[(year - 1960) / 10]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: