c - 给定某个整数 N,有多少个基数 b 使得 N 的基数 b 表示以 1 开头?

标签 c math

这个问题是在 codechef 竞赛之一中提出的。我已经在 c 中尝试过了。下面是我的代码:

    scanf("%d",&N);
    count=0;
    for(i=2;i<=N;i++)
    {

        c=a;
        while(c>=i)
           {
               c=c/i;
           }
           if(b==1)
             count++;
    }

    printf("%d\n",count);

但这只给了我部分分数。能在更短的时间内解决吗?如果是这样,怎么办?

最佳答案

基数 b 中以 1 和 d 数字开头的最小数字是 10...0,即 b^ (d-1).

最大的数字是2*b^(d-1)-1。因此,给定数字 N 落在该范围内的基数由不等式给出

pow(0.5*(N+1), 1.0/(d-1) ) <= b <= pow(N, 1.0/(d-1) )

通过适当的舍入,考虑随机浮点误差,您可以直接计算有多少个整数 b 在这些边界内。

关于c - 给定某个整数 N,有多少个基数 b 使得 N 的基数 b 表示以 1 开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41305215/

相关文章:

c - 为什么我会遇到段错误(strcmp 或 fgets)?

python - 我什么时候可以安全地使用 float 来做数学?

algorithm - 为什么我在下面的问题中只迭代到 sqrt(N) ?

c++ - 无法找出弹弓所需二次曲线背后的数学运算

c - 使用 websocket 的 GWAN 双向通信

c - 这个程序有什么问题? (字符串相关)

c - 为什么这个循环每次循环打印相同的值?

c - -ansi -pedantic C 中的 64 位长度整数

java - 以正确的方式将经度和纬度坐标转换为 map 像素(X 和 Y)

java - 对文本文件Java进行数学计算的性能