You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将比特币白皮书中的攻击者成功概率C代码复现至Python?

将比特币白皮书中的攻击者成功概率C代码转换为Python实现

嘿,我来帮你把这段实现比特币白皮书攻击者成功概率的C代码转成Python版本。先看看原C代码是怎么写的:

#include <math.h>
double AttackerSuccessProbability(double q, int z) {
    double p = 1.0 - q;
    double lambda = z * (q / p);
    double sum = 1.0;
    int i, k;
    for (k = 0; k <= z; k++) {
        double poisson = exp(-lambda);
        for (i = 1; i <= k; i++)
            poisson *= lambda / i;
        sum -= poisson * (1 - pow(q / p, z - k));
    }
    return sum;
}

接下来是对应的Python实现,我尽量保持逻辑和原代码完全一致,同时贴合Python的语法习惯:

import math

def attacker_success_probability(q: float, z: int) -> float:
    p = 1.0 - q
    lambda_val = z * (q / p)  # 避开Python内置的lambda关键字
    sum_val = 1.0
    
    for k in range(z + 1):
        poisson = math.exp(-lambda_val)
        for i in range(1, k + 1):
            poisson *= lambda_val / i
        sum_val -= poisson * (1 - math.pow(q / p, z - k))
    
    return sum_val

几点小说明:

  • 把变量名lambda改成了lambda_val,因为lambda是Python的关键字,不能直接用作变量名
  • 用Python的range()函数替代了C的for循环逻辑,range(z+1)刚好覆盖k从0到z的所有整数
  • 加了可选的类型提示,让代码的参数和返回值类型更清晰,符合现代Python的写法
  • 所有数学运算都使用了Python标准库math里的对应函数,和C的math.h行为完全一致

你可以测试一下,比如传入q=0.1、z=5,两种语言的输出应该完全一致,能验证转换的正确性。

内容的提问来源于stack exchange,提问作者Hack_Hut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:28:50