雪人爱晒大太阳
发表于 2018-3-8 10:23:54
想的思路很快,但是编程还是花了15分钟左右,感觉自己的编程能力还是要加强。。 关于质数的定义那一块可以有很多种方法,我还是选的一种感觉最笨但是很好理解的方法。。
#先定义质数的判断函数
def identify_prime_number(x):
flag = 1
#判断x是否是质数
for k in range(2,x):
if x%k == 0 :
flag = 0
break
return flag
special_prime_number = []
def identify_special_prime_number(x):
flag2 = 0
flag1 = identify_prime_number(i)
if flag1 == 1:
i_change = i*10+1
flag2 = identify_prime_number(i_change)
return flag2
special_prime_number = []
for i in range(1,101):
flag_prime_number = identify_special_prime_number(i)
if flag_prime_number == 1:
special_prime_number.append(i)
#special_prime_number.pop(1)
special_prime_number = special_prime_number
print(special_prime_number)
#
jiamin_2010
发表于 2018-3-8 10:40:17
list1 = []
i =2
for i in range(2,101):
j =2
for j in range(2,i):
if i%j==0:
break
else:
k =2
for k in range(2,(i*10+1)):
if (i*10+1) % k ==0:
break
else:
list1.append(i*10+1)
print(list1)
写的不好 求大神指点一下
nlnlchb
发表于 2018-3-8 13:21:54
{:10_250:}{:10_250:}{:10_250:}{:10_250:}
victor.xu
发表于 2018-3-8 14:30:55
定义一个求质数的函数,分别求出100,1000以内的质数,构成lis1和lis2,lis1中的元素乘10+1后,判断是否在lis2中。
def find_prime(n):
prime =
for divident in range(5, n, 2):
divisor = 2
count = 0
j = int(divident ** 0.5)
while divisor <= j:
if divident % divisor == 0:
divisor += 1
count += 1
else:
divisor += 1
if count == 0:
prime.append(divident)
return prime
lis1 = find_prime(100)
lis2 = find_prime(1000)
result = []
temp =
for j in temp:
if j in lis2:
result.append(j)
print(result)
大硕硕
发表于 2018-3-8 15:58:39
import math as m
def isPrime(x):
if x == 2 or x == 3:
return 1;
if x % 6 != 5 and x % 6 != 1:
return 0;
temp = int(m.sqrt(x))
for each in range(5,temp,6):
if x % each == 0 or x % (each + 7) == 0:
return 0;
return 1;
for i in range(2,100):
if isPrime(i) and isPrime(i*10+1):
print(i)
3
7
13
19
25
31
37
43
49
61
79
91
97
溯影
发表于 2018-3-8 16:01:13
import math
def is_prime(number):
if number == 1:
return False
if number == 2:
return True
for i in range(2,int(math.sqrt(number)+1)):
if number % i == 0:
return False
return True
if __name__ == '__main__':
list1 =
for i in list1:
if is_prime(i*10 + 1):
print(i)
溯影
发表于 2018-3-8 16:02:33
溯影 发表于 2018-3-8 16:01
运行结果:
3
7
13
19
31
43
97
***Repl Closed***
fan1993423
发表于 2018-3-8 16:25:28
m=[]
l=[]
for a in range(2,101):
if a==2:
m.append(a)
else:
if 0 not in :
m.append(a)
for n in m:
if 0 not in [(10*n+1)%c for c in range(2,10*n)]:
l.append(n)
print(l)
sukiwhip
发表于 2018-3-8 16:53:54
本帖最后由 sukiwhip 于 2018-3-8 16:56 编辑
prime_number = []
prime_number2 = []
for i in range(1,101):#先拿出一百以内的质数
c = 0
for j in range(1,i+1):
b = i % j
if b == 0 :
c += 1
if c == 2:
prime_number.append(i)
long = len(prime_number)
for k in range(0,long):
c = 0
e = prime_number*10 + 1#用来判断的数
for l in range(1,e + 1):#再判断一次质数的条件
d = e % l
if d == 0 :
c += 1
if c == 2:
prime_number2.append(prime_number)
print('这样的质数还有:' + str(prime_number2))
哎。。。判断一个数是不是质数应该先打包成函数的。。。下次再改进
scchapter
发表于 2018-3-8 17:57:35
#质数
for j in range(2,100):
j1=j*10+1
for i in range(2,j1):
if j1%i==0:
break
else :
print(j)
solomonxian
发表于 2018-3-8 18:24:24
本帖最后由 solomonxian 于 2018-3-8 18:25 编辑
题目多了感觉已经做过几遍了,现在速度比以前快多了{:10_256:}
def fun(n=100):
prime = [i for i in range(2, 10*n+2)
if 0 not in (i%j for j in range(2, int(i**0.5)+1))]
return
还有个给力的工具库
import gmpy2
def fun2(n=100):
return ))]
人这么多,我发我的答案,楼主你直接看对不对好了,用不着测代码
°蓝鲤歌蓝
发表于 2018-3-8 20:04:02
°蓝鲤歌蓝 发表于 2018-3-7 10:23
忘记了哈哈。
冬雪雪冬
发表于 2018-3-8 20:37:35
评分结束。
说说我的思路。
先建立一个列表,存放1000以内的所有质数(100以内最大质数*10+1不会大于1000).
由于有了质数列表,不用计算所有的被除数,只要看看能否被列表中小于等于被测数平方根的质数整除就可以了。
后面就简单了,看看质数*10+1在不在这个列表中,如果在就输出或放到一个新列表中统一输出。
lst1 =
for i in range(3, 1000, 2):
j = 0
while lst1 * lst1 <= i:
if i % lst1 == 0:
break
j += 1
else:
lst1.append(i)
lst2 = []
for i in lst1:
if i > 100:
break
if i * 10 + 1 in lst1:
lst2.append(i)
print(lst2)
fengyutianshang
发表于 2018-3-8 21:24:13
import math
def IsPrime(num):
tem = math.sqrt(num)
if num ==2 or num ==3:
return 1
if num % 6 !=1 and num % 6 !=5:
return 0
for each in range(5,int(tem)+1,6):
if num % each == 0 or num % (each + 2) == 0:
return 0;
return 1
for n in range(2,100):
if IsPrime(num = n) and IsPrime(num = 10*n + 1):
print(n)
3
7
13
19
31
43
97
tsembrace
发表于 2018-3-8 21:25:56
'''
对于质数大家都很熟悉,从中可以发现某些质数乘以10再加1得到的仍然是质数,
例如3, 3 * 10 + 1 = 31, 31仍是质数。
当然这样的数还有不少,求出100以内这样的质数。
'''
def isPrime(n):
if n<2:
return False
elif n==2:
return True
else:
for i in range(2,n):
if n%i==0:
return False
return True
for n in range(1,100):
if isPrime(n):
if isPrime(n*10+1):
print(n)
checkily
发表于 2018-3-8 22:07:56
本帖最后由 checkily 于 2018-3-8 22:22 编辑
def isprime(n):
for i in range(2, n):
if not n%i:
return False
else:
return True
for i in range(2, 101):
if isprime(i) and isprime(i*10+1):
print(i,end='')
xiaobiubiu
发表于 2018-3-9 00:14:19
def ZhiShu(n):
if n == 2:
return 1
else:
for i in range(2,n):
if n % i == 0:
return 0
return 1
for a in range(1,101):
if ZhiShu(a) == 1:
s = a*10+1
if ZhiShu(s) == 1:
print(a)
pillar
发表于 2018-3-9 10:49:33
本帖最后由 pillar 于 2018-3-9 12:41 编辑
"方法一:"
def Daily_practice_159(n):
a = n//2 # 对该数除二取整
for i in range(2,a+2):
"判断质数只需判断这个数的前二分子一就可以了"
if n%i ==0:
break
else:
returnn
for n in range (2,100):
if Daily_practice_159(n) and Daily_practice_159(n*10+1):
print(n)
#
Daily_practice_159(n)
“方法二:”
def Daily_practice_159():
for i in range(2,100):
j = 2
a = i//2
for j in range(2,a+2):
# while j <= a+1:
if i%j == 0:
break
# j += 1
else:
b=i*10+1
k=2
for k in range(2,b//2+1):
if b%k == 0:
break
# k += 1
else:
print(i)
Daily_practice_159()
lyjlyj
发表于 2018-3-9 17:35:14
def prime_num(num):
n = 2
while n <= (num//2):
if num % n == 0:
return False
n += 1
return True
def fishc159(num):
if prime_num(num):
temp = num * 10 +1
if prime_num(temp):
print num
for i in range(1,100):
fishc159(i)
solomonxian
发表于 2018-3-9 18:57:28
冬雪雪冬 发表于 2018-3-8 20:37
评分结束。
说说我的思路。
先建立一个列表,存放1000以内的所有质数(100以内最大质数*10+1不会大于1000 ...
你这是用了质因数,效率比一路循环上去高啊,
之前jerry说有个最快的方法,忘了
我就顾着写得快···话说评分就刚好停我那吗{:10_250:}