|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
给定一个正整数,编写程序找出质数对的和等于输入的这个正整数的数对,数对第一个数小于等于第二个数,并输出结果。输入值小于1000,大于50 G, P& G$ Y4 g0 @; A) V
1 n7 R( D$ A( w, w0 W) Q- def is_prime(num):
, {' @0 D1 c# i5 S/ ] - for i in range(2,int(num**0.5)+1):8 T4 C, c( D) \* S$ \
- if num % i ==0:7 k; A! @0 v0 U4 E
- return False# b/ q% O, e3 G) y. U9 _: A w2 E
- else:
& O, ~* F7 E" a! e u) a - return True" i8 t6 @; d! c* H# D' Q
- num=int(input())# [6 i0 O1 Z" `/ _) W. A
- prime_ls=[int(i)for i in range(2,num) if is_prime(i)]
) b6 ~' a0 e) K$ Y% S; a4 M - #print(primelist)
' Q- J" A' f$ E3 n2 K5 S. G
& w0 }4 W! {( `" Z( I5 ~" _
! s5 }# f! t+ `) C& [5 i# w- # # 方法一,循环判断
* ?2 N" g" p; \% K7 S6 m - # data=[]6 B+ H3 O+ D- ]/ a/ T# k( G$ j
- # for num1 in prime_ls:
4 D8 g2 x& X. a; ~. }1 U( Y$ U - # for num2 in prime_ls:
C5 X' L/ V1 F' _/ }8 y - # if num1+num2==num and num1<=num2:1 c, N& r8 P/ ~8 M t
- # data.append((num1,num2))
( J; W- N" I3 x, T$ X - # data=list(set(data))) y, a$ k4 X+ ]
- # data.sort()& n2 h9 u9 e0 |
- # for i in data:+ j. M$ {- m; \& J6 |
- # print(i[0],i[1])
; I/ ?7 B" P! Z' f; A
6 q9 q) f2 `! S0 c9 I- # 方法二,滑动区间法) N! i; h: C# l0 [5 g6 {
- l = 0
* e, h; y! s$ o$ R/ w* l& o - r = len(prime_ls)-16 O, y9 \! C! ?9 X* b' L
- data = []" i- p6 z" d8 T* H+ U1 H# L
- while l<=r:
$ E5 q, b% d3 V ^1 U- v: F8 R - result = prime_ls[l] + prime_ls[r]
1 o- R4 G5 u) S' O- ^' Q) x/ r( R - if result>num:
5 `! F: j8 N- K6 r- X - r-=1
+ M/ {6 S7 Q" F1 w# J1 d3 V - elif result<num:* ]5 a& k: o, v" J& ?! l& j
- l+=19 U L$ D% k( I4 O; h' A; E
- else:! E8 L6 J* q K1 @" I* Z
- # print(prime_ls[l],prime_ls[r])( K6 t6 y' {& C3 h, j# _, y
- data.append([prime_ls[l],prime_ls[r]])1 _* O% s: M5 m
- l+=1+ Z- \& C3 b' x& c" W
- data.sort()
& y5 [8 s3 R, T, T1 A - for i in data:: P% V. S$ h+ ]
- print(i[0],i[1])
复制代码 |
|