回答編集履歴

5

説明の追加

2018/09/13 12:31

投稿

退会済みユーザー
test CHANGED
@@ -8,13 +8,11 @@
8
8
 
9
9
  (II)```for```文で友愛数を求める
10
10
 
11
- 下にあるコードで```if num2 == i and num1 != num2 and num1 < num2:```とありますがそれぞれの意味は
11
+ 下にあるコードで```if num2 == i and num1 < num2:```とありますがそれぞれの意味は
12
12
 
13
13
  (i)```num2 == i``` 友愛数なら
14
14
 
15
- (ii)```num1 != num2``` 友愛数の中でもより特別な完全数は除き
16
-
17
- (iii)```num1 < num2``` 友愛数の一つの組が一つだけ表示されるように(例えば, (220,284) (284,220)などと
15
+ (ii)```num1 < num2``` 友愛数の一つの組が一つだけ表示されるように(例えば, (220,284) (284,220)などと
18
16
 
19
17
  表示しされるのを (220,284)だけ表示されるようにする) 
20
18
 
@@ -60,7 +58,7 @@
60
58
 
61
59
  num2 = sum_divisor(num1)
62
60
 
63
- if num2 == i and num1 != num2 and num1 < num2:
61
+ if num2 == i and num1 < num2:
64
62
 
65
63
  print(num1,num2)
66
64
 
@@ -126,8 +124,48 @@
126
124
 
127
125
  num2 = sum_divisor(num1)
128
126
 
129
- if num2 == i and num1 != num2 and num1 < num2:
127
+ if num2 == i and num1 < num2:
130
128
 
131
129
  print(num1,num2)
132
130
 
133
131
  ```
132
+
133
+ <追記2>
134
+
135
+ 処理速度は落ちますが、```list```を使った方法も一応載せておきます。
136
+
137
+
138
+
139
+ ```python
140
+
141
+ def sum_divisors(n):
142
+
143
+ divisors = []
144
+
145
+ for i in range(1,n):
146
+
147
+ if n % i == 0:
148
+
149
+ divisors.append(i)
150
+
151
+ sum = 0
152
+
153
+ for number in divisors:
154
+
155
+ sum += number
156
+
157
+ return sum
158
+
159
+
160
+
161
+ for i in range(2,1500):
162
+
163
+ num1 = sum_divisors(i)
164
+
165
+ num2 = sum_divisors(num1)
166
+
167
+ if i == num2 and num1 < num2:
168
+
169
+ print(num1,num2)
170
+
171
+ ```

4

説明の訂正

2018/09/13 12:31

投稿

退会済みユーザー
test CHANGED
@@ -88,7 +88,7 @@
88
88
 
89
89
  <追記>
90
90
 
91
- .```import```を使わずに書く方法です。
91
+ .```import```を使わずに書く方法です。LouiS0616さんのご指摘のように平方根は```n ** 0.5```でできます。
92
92
 
93
93
 
94
94
 
@@ -112,7 +112,7 @@
112
112
 
113
113
 
114
114
 
115
- if int(n ** 0.5) * int(n ** 0.5) == n:
115
+ if int(n ** 0.5) ** 2 == n:
116
116
 
117
117
  sum += int(n ** 0.5)
118
118
 

3

ソースの訂正

2018/09/13 07:31

投稿

退会済みユーザー
test CHANGED
@@ -88,11 +88,7 @@
88
88
 
89
89
  <追記>
90
90
 
91
- .```import```を使わずに書く方法です。ただ```import```を使わなかったら,平方根が出せないのでその分
91
+ .```import```を使わずに書く方法です。
92
-
93
- 処理速度が落ちます。そのため、下に書いたコードでは友愛数を```for```文で表示するところでループさせる回数を
94
-
95
- 減らしています。
96
92
 
97
93
 
98
94
 
@@ -106,17 +102,25 @@
106
102
 
107
103
  sum = 1
108
104
 
109
- for i in range(2,n):
105
+ for i in range(2,int(n ** 0.5)):
110
106
 
111
107
  if n % i == 0:
112
108
 
113
109
  sum += i
114
110
 
111
+ sum += n / i
112
+
113
+
114
+
115
+ if int(n ** 0.5) * int(n ** 0.5) == n:
116
+
117
+ sum += int(n ** 0.5)
118
+
115
- return sum
119
+ return int(sum)
116
120
 
117
121
 
118
122
 
119
- for i in range(2,5000):
123
+ for i in range(2,15000):
120
124
 
121
125
  num1 = sum_divisor(i)
122
126
 

2

誤字の訂正

2018/09/13 07:26

投稿

退会済みユーザー
test CHANGED
@@ -14,7 +14,11 @@
14
14
 
15
15
  (ii)```num1 != num2``` 友愛数の中でもより特別な完全数は除き
16
16
 
17
- (iii)```num1 < num2``` 友愛数の一つの組が一つだけ表示されるように(例えば, (220,284) (284,220)などとひょうじしされるのを (220,284)だけ表示されるようにする)
17
+ (iii)```num1 < num2``` 友愛数の一つの組が一つだけ表示されるように(例えば, (220,284) (284,220)などと
18
+
19
+ 表示しされるのを (220,284)だけ表示されるようにする) 
20
+
21
+
18
22
 
19
23
  です。
20
24
 
@@ -84,9 +88,11 @@
84
88
 
85
89
  <追記>
86
90
 
87
- importを使わずに書く方法です。ただimportを使わなかったら,平方根が出せないのでその分
91
+ .```import```を使わずに書く方法です。ただ```import```を使わなかったら,平方根が出せないのでその分
88
92
 
93
+ 処理速度が落ちます。そのため、下に書いたコードでは友愛数を```for```文で表示するところでループさせる回数を
94
+
89
- 処理速度が落ちます。
95
+ 減らしています。
90
96
 
91
97
 
92
98
 

1

ソースの追加

2018/09/13 07:22

投稿

退会済みユーザー
test CHANGED
@@ -79,3 +79,45 @@
79
79
  10744 10856
80
80
 
81
81
  12285 14595
82
+
83
+
84
+
85
+ <追記>
86
+
87
+ importを使わずに書く方法です。ただimportを使わなかったら,平方根が出せないのでその分
88
+
89
+ 処理速度が落ちます。
90
+
91
+
92
+
93
+ ```python
94
+
95
+ def sum_divisor(n):
96
+
97
+ if n <= 1:
98
+
99
+ return 0
100
+
101
+ sum = 1
102
+
103
+ for i in range(2,n):
104
+
105
+ if n % i == 0:
106
+
107
+ sum += i
108
+
109
+ return sum
110
+
111
+
112
+
113
+ for i in range(2,5000):
114
+
115
+ num1 = sum_divisor(i)
116
+
117
+ num2 = sum_divisor(num1)
118
+
119
+ if num2 == i and num1 != num2 and num1 < num2:
120
+
121
+ print(num1,num2)
122
+
123
+ ```