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

PARI/GP计数去重问题:如何实现结果仅单次输出?

解决PARI/GP中重复输出计数-数值对的问题

问题根源

原代码存在两个导致重复输出的核心问题:

  • 在t循环过程中,每次s超过27就立即打印,同一个数值n会随着s的递增被多次输出(比如s=28打一次,s=29再打一次)
  • 嵌套循环可能生成重复的n值,导致同一计数-数值对被重复打印

修改后的代码

// 初始化集合存储已输出的数值,避免重复
seen = Set();
for(a=12170,12170, 
  for(p=67, 100, 
    for(b=0,3, 
      for(c=1,3, 
        for(d=0,2, 
          for(f=0,2, 
            for(g=0,2, 
              for(h=0,2, 
                for(j=0,2, 
                  for(k=0,2, 
                    for(l=0,2, 
                      for(q=0,2, 
                        n = 3^b*5^c*11^d*13^f*19^g*29^h*37^j*53^k*59^l*61^q*p;
                        if(n < 2^64, 
                          s=0;
                          // 完成所有t的计数
                          for(t=1,100, 
                            if(ispseudoprime((2*a-1)*2^t + n), s++);
                          );
                          // 仅在计数完成后,且该数值未输出过才打印
                          if(s>27 && !setsearch(seen, n), 
                            print(s,",",n);
                            setinsert(seen, n);
                          );
                        );
                      );
                    );
                  );
                );
              );
            );
          );
        );
      );
    );
  );
);

关键修改说明

  1. 提取重复计算的数值n:将原本多次计算的乘积赋值给变量n,既提升运行效率也避免潜在计算误差
  2. 延迟打印时机:等t循环完成所有计数后,再判断s>27的条件,确保每个n只输出最终的计数结果
  3. 添加去重集合:用Set类型的seen记录已输出的n,通过setsearch检查是否已存在,彻底避免重复输出同一数值对

内容的提问来源于stack exchange,提问作者Aurel-BG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:07:31