#!/usr/bin/env python # coding: utf-8 # # 声明 # 本源码为[浚宇的博客](http://blog.junyu.pro)博文中代码源码,欢迎下载、交流,请标明出处。 # # ## 基础办法 # In[78]: import numpy as np # In[79]: # x = int(raw_input(prompt='please insert a number')) x = 100 is_prime=0 for i in range(2,x): if x % i == 0: is_prime = 0 break else: is_prime = 1 if is_prime==0: print "%d is not a prime" %x if is_prime==1: print "%d is a prime" %x # In[80]: # x = int(raw_input(prompt='please insert a number')) x = 100 is_prime=0 sum=0 for j in range(2,x): for i in range(2,j): if j % i == 0: is_prime = 0 break else: is_prime = 1 sum += j print sum # ## 利用数学知识 # In[81]: def is_prime(x): for i in range(2,int(x**(1/2.)+1)): if x % i == 0: is_prime_flag = 0 # print "it is not a prime" break else: is_prime_flag = 1 # print "it is a prime" return is_prime_flag # In[82]: def prime_sum(num): sum = 0 for sum_i in range (2,num): if is_prime(sum_i): sum += sum_i return sum # ## Numpy库实现 # In[9]: def is_prime_v(x): a = np.arange(1,x+1) b = a.reshape(x,1) c = a % b d = np.where(c>0,0,1) e = d.sum(axis = 0) f = np.where(e!=2,0,1) g = (f*a).sum() return g # ## 向量方法 # # In[57]: def judge_prime(x): for i in range(2,int(x**(1/2.)+1)): if x % i == 0: is_prime_flag = 0 return False return True def sum_prime_v(y): arr = np.arange(1,y+1) v = np.vectorize(judge_prime) return arr[v(arr)].sum() # # 效率计算 # 注意:方法1的效率计算需要先封装为函数,后面的处理才比较方便 # In[26]: def method1(x): is_prime=0 sum=0 for j in range(2,x): for i in range(2,j): if j % i == 0: is_prime = 0 break else: is_prime = 1 sum += j return sum # ## 先验证结果,再验证效率 # In[54]: def printout(x): x1 = method1(x) x2 = prime_sum(x) x3 = is_prime_v(x) x4 = sum_prime_v(x) print "方法1的结果是 %d" %x1 print "方法2的结果是 %d" %x2 print "方法3的结果是 %d" %x3 print "方法4的结果是 %d" %x4 # In[58]: printout(1000) # In[73]: y = 10000 # In[74]: get_ipython().run_line_magic('timeit', '-n10 method1(y)') # In[75]: get_ipython().run_line_magic('timeit', '-n10 prime_sum(y)') # In[76]: get_ipython().run_line_magic('timeit', '-n10 is_prime_v(y)') # In[77]: get_ipython().run_line_magic('timeit', '-n10 sum_prime_v(y)')