teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

書き直した

2018/05/19 11:53

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -1,4 +1,47 @@
1
+ こんなになっちゃいました。可能な組み合わせの和の中に素数が入っていたら再サンプリングしなおしてやり直し、入っていなければbreakしてその結果を出す・・・というロジックですね。
2
+
1
3
  ```python
4
+ import random
5
+ import itertools
6
+
7
+ def is_prime(n):
8
+ for i in range(2, n):
9
+ if n%i == 0:
10
+ return False
11
+ return True
12
+
13
+ N = int(input())
14
+
15
+ primes_list100 = []
16
+ x = 0
17
+ for i in range(2,1000):
18
+ if is_prime(i):
19
+ primes_list100.append(i)
20
+ x += 1
21
+ if x >=100:
22
+ break
23
+
24
+ primes_list = random.sample(primes_list100,N)
25
+ while True:
26
+ prime_flag = False
27
+ for combi in itertools.combinations(primes_list,5):
28
+ combi_sum = sum(combi)
29
+ if is_prime(combi_sum):
30
+ prime_flag = True
31
+ break
32
+ if prime_flag:
33
+ primes_list = random.sample(primes_list100,N)
34
+ else:
35
+ break
36
+
37
+ print(' '.join(map(str, primes_list)))
38
+ ```
39
+
40
+ Nが大きくなると時間制約にひっかかると思います・・・。
41
+
42
+ ### よく読まないで書いてた回答
43
+ なんでこんなの書いたんだろう・・・。
44
+ ```python
2
45
  for i in itertools.combinations(primes_list,5):
3
46
  k = sum(i)
4
47
  for j in range(2,k):
@@ -6,13 +49,4 @@
6
49
  break
7
50
  else:
8
51
  primes_list = primes()
9
- ```
52
+ ```
10
- ~~のelseのときにiが期待される結果になっている訳なので、そのままbreakして(外側のforのbreak)
11
- ~~
12
- ```python
13
- print(' '.join(map(str, i)))
14
- ```
15
-
16
- ~~でいけませんか。~~
17
-
18
- 適当に書いてました。ごめんなさい。間違ってるので書き直します。

1

間違ってた・・・

2018/05/19 11:53

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -7,9 +7,12 @@
7
7
  else:
8
8
  primes_list = primes()
9
9
  ```
10
- のelseのときにiが期待される結果になっている訳なので、そのままbreakして(外側のforのbreak)
10
+ ~~のelseのときにiが期待される結果になっている訳なので、そのままbreakして(外側のforのbreak)
11
+ ~~
11
12
  ```python
12
13
  print(' '.join(map(str, i)))
13
14
  ```
14
15
 
15
- でいけませんか。
16
+ ~~でいけませんか。~~
17
+
18
+ 適当に書いてました。ごめんなさい。間違ってるので書き直します。