Advertisement

python求素数对(质数对)个数

阅读量:

室友发现了牛客网上的一个编程题目,并且我也尝试了一下编写相应的代码。我发现自己的编写得相对复杂,并意识到目前仍存在诸多挑战。不过我发现了一些不错的解决方案,在此分享一下

首先是题目:

第一个代码:

复制代码
 import math

    
  
    
 def isOk(n):
    
     if n & 1 == 0:
    
         return False
    
     i = 3
    
     n_sqrt = math.sqrt(n)
    
     while i <= n_sqrt:
    
         if n % i == 0:
    
             return False
    
         i += 2
    
     return True
    
  
    
 if __name__ == '__main__':
    
     N = int(input())
    
     ans = 0
    
     for i in range(1, N//2+1, 2):
    
         if isOk(i) and isOk(N-i):  ##false 和 true
    
             ans += 1
    
     print(ans)

这个代码是用false和true来判断if的条件的。

第二个代码:

复制代码
 def issushu(n):

    
     flag=1
    
     if n<2:
    
     flag=0
    
     else:
    
     for i in range(2,n):  ##
    
         if n%i==0:
    
             flag=0
    
             break
    
         else:
    
             flag=1
    
     return flag
    
       
    
 a=int(input())
    
 count=0
    
 for i in range(2,int(a/2)+1):
    
     if issushu(i)==1 and issushu(a-i)==1:
    
     count+=1
    
 print(count)

实际上这两种概念本质上是相同的。然而它们分别通过1和true来表示这两个判断逻辑。值得注意的是在第一种方案中突然使用了if __name__ == '__main__':'这一语句这可能只是一种偶然现象尤其是在外部导入时可能会更优。对于第二个方案而言在循环次数较多的情况下可以通过计算\sqrt{N}来减少一半左右的运算量从而提高效率。

这些程序看上去很简单,但是有很多值得学习的地方。。。

觉得自己在程序的精简度方面还有很多提升的空间。

全部评论 (0)

还没有任何评论哟~