【问题标题】:how to move to the next loop in PARI/GP if I use multi-line nested for loops?如果我使用多行嵌套 for 循环,如何移动到 PARI/GP 中的下一个循环?
【发布时间】:2020-03-21 21:27:44
【问题描述】:

我的问题是:如果我使用多行嵌套 for 循环,如何移动到 PARI/GP 中的下一个循环?例如:

如果我使用此代码:

for(K=1,10,for(i=1,5,if(isprime(2*i*prime(K)+1)==1,print(2*i"*"prime(K) ))))

因为 2*(i=1)*prime(K=1)+1=5 是素数,我需要我的机器不要循环 i=2......i=5,我需要它移动到下一个 K,所以:

如何在 PARI/GP 上执行此操作?

如果我的问题不清楚或重复,我很抱歉。

【问题讨论】:

    标签: pari-gp


    【解决方案1】:

    你需要使用break。但首先,让我们清理一下演示文稿,这样它就更具可读性:

    func()=
    {
      for(K=1,10,
        for(i=1,5,
          if(isprime(2*i*prime(K)+1)==1,
            print(2*i"*"prime(K))
          )
        )
      );
    }
    func()
    

    你想跳出最里面的循环,就像这样(只是给出函数本身):

    func()=
    {
      for(K=1,10,
        for(i=1,5,
          if(isprime(2*i*prime(K)+1)==1,
            print(2*i"*"prime(K));
            break
          )
        )
      );
    }
    

    但是当我们在这里时,无需添加== 1if 已经在非零值上分支。

    func()=
    {
      for(K=1,10,
        for(i=1,5,
          if(isprime(2*i*prime(K)+1),
            print(2*i"*"prime(K));
            break
          )
        )
      );
    }
    

    我们还可以存储 prime(K) 的值,因此我们不需要计算两次。但更好的是,让我们直接在素数上使用循环,这样我们就不需要 prime() 函数了!

    func(maxK=10)=
    {
      my(K=0);
      forprime(p=2,prime(maxK),
        K++;
        for(i=1,5,
          if(isprime(2*i*p+1),
            print(2*i"*"p);
            break
          )
        )
      );
    }
    

    在这里,我更改了函数,因此您可以使用 10 以外的不同最大值调用它,并且我保留了索引以防您出于某种原因需要它。但我认为更好的方法是直接限制您想要进入素数的高度,并完全忘记素数索引:

    func(maxP=29)=
    {
      forprime(p=2,maxP,
        for(i=1,5,
          if(isprime(2*i*p+1),
            print(2*i"*"p);
            break
          )
        )
      );
    }
    

    在这两种情况下,我都添加了一个默认参数,因此调用 func() 将执行与原始函数相同的操作(只是它现在破坏了您想要的方式)。

    【讨论】:

    • 非常感谢您,先生,很抱歉,由于我的声誉数字,我无法为答案投票。
    • 很高兴为您提供帮助!如果您还有其他问题,请告诉我。
    猜你喜欢
    • 2013-03-25
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2015-10-15
    • 1970-01-01
    • 2021-05-15
    • 2020-02-21
    相关资源
    最近更新 更多