回答編集履歴
5
説明の追加
answer
CHANGED
@@ -3,10 +3,9 @@
|
|
3
3
|
.```n```が平方数の場合だけ約数の和```sum```にその平方根を加えましょう。
|
4
4
|
|
5
5
|
(II)```for```文で友愛数を求める
|
6
|
-
下にあるコードで```if num2 == i and num1
|
6
|
+
下にあるコードで```if num2 == i and num1 < num2:```とありますがそれぞれの意味は
|
7
7
|
(i)```num2 == i``` 友愛数なら
|
8
|
-
(ii)```num1 != num2``` 友愛数の中でもより特別な完全数は除き
|
9
|
-
(
|
8
|
+
(ii)```num1 < num2``` 友愛数の一つの組が一つだけ表示されるように(例えば, (220,284) (284,220)などと
|
10
9
|
表示しされるのを (220,284)だけ表示されるようにする)
|
11
10
|
|
12
11
|
です。
|
@@ -29,7 +28,7 @@
|
|
29
28
|
for i in range(2,15000):
|
30
29
|
num1 = sum_divisor(i)
|
31
30
|
num2 = sum_divisor(num1)
|
32
|
-
if num2 == i and num1
|
31
|
+
if num2 == i and num1 < num2:
|
33
32
|
print(num1,num2)
|
34
33
|
|
35
34
|
```
|
@@ -62,6 +61,26 @@
|
|
62
61
|
for i in range(2,15000):
|
63
62
|
num1 = sum_divisor(i)
|
64
63
|
num2 = sum_divisor(num1)
|
65
|
-
if num2 == i and num1
|
64
|
+
if num2 == i and num1 < num2:
|
66
65
|
print(num1,num2)
|
66
|
+
```
|
67
|
+
<追記2>
|
68
|
+
処理速度は落ちますが、```list```を使った方法も一応載せておきます。
|
69
|
+
|
70
|
+
```python
|
71
|
+
def sum_divisors(n):
|
72
|
+
divisors = []
|
73
|
+
for i in range(1,n):
|
74
|
+
if n % i == 0:
|
75
|
+
divisors.append(i)
|
76
|
+
sum = 0
|
77
|
+
for number in divisors:
|
78
|
+
sum += number
|
79
|
+
return sum
|
80
|
+
|
81
|
+
for i in range(2,1500):
|
82
|
+
num1 = sum_divisors(i)
|
83
|
+
num2 = sum_divisors(num1)
|
84
|
+
if i == num2 and num1 < num2:
|
85
|
+
print(num1,num2)
|
67
86
|
```
|
4
説明の訂正
answer
CHANGED
@@ -43,7 +43,7 @@
|
|
43
43
|
12285 14595
|
44
44
|
|
45
45
|
<追記>
|
46
|
-
.```import```を使わずに書く方法です。
|
46
|
+
.```import```を使わずに書く方法です。LouiS0616さんのご指摘のように平方根は```n ** 0.5```でできます。
|
47
47
|
|
48
48
|
```python
|
49
49
|
def sum_divisor(n):
|
@@ -55,7 +55,7 @@
|
|
55
55
|
sum += i
|
56
56
|
sum += n / i
|
57
57
|
|
58
|
-
if int(n ** 0.5) *
|
58
|
+
if int(n ** 0.5) ** 2 == n:
|
59
59
|
sum += int(n ** 0.5)
|
60
60
|
return int(sum)
|
61
61
|
|
3
ソースの訂正
answer
CHANGED
@@ -43,21 +43,23 @@
|
|
43
43
|
12285 14595
|
44
44
|
|
45
45
|
<追記>
|
46
|
-
.```import```を使わずに書く方法です。
|
46
|
+
.```import```を使わずに書く方法です。
|
47
|
-
処理速度が落ちます。そのため、下に書いたコードでは友愛数を```for```文で表示するところでループさせる回数を
|
48
|
-
減らしています。
|
49
47
|
|
50
48
|
```python
|
51
49
|
def sum_divisor(n):
|
52
50
|
if n <= 1:
|
53
51
|
return 0
|
54
52
|
sum = 1
|
55
|
-
for i in range(2,n):
|
53
|
+
for i in range(2,int(n ** 0.5)):
|
56
54
|
if n % i == 0:
|
57
55
|
sum += i
|
56
|
+
sum += n / i
|
57
|
+
|
58
|
+
if int(n ** 0.5) * int(n ** 0.5) == n:
|
59
|
+
sum += int(n ** 0.5)
|
58
|
-
return sum
|
60
|
+
return int(sum)
|
59
61
|
|
60
|
-
for i in range(2,
|
62
|
+
for i in range(2,15000):
|
61
63
|
num1 = sum_divisor(i)
|
62
64
|
num2 = sum_divisor(num1)
|
63
65
|
if num2 == i and num1 != num2 and num1 < num2:
|
2
誤字の訂正
answer
CHANGED
@@ -6,7 +6,9 @@
|
|
6
6
|
下にあるコードで```if num2 == i and num1 != num2 and num1 < num2:```とありますがそれぞれの意味は
|
7
7
|
(i)```num2 == i``` 友愛数なら
|
8
8
|
(ii)```num1 != num2``` 友愛数の中でもより特別な完全数は除き
|
9
|
-
(iii)```num1 < num2``` 友愛数の一つの組が一つだけ表示されるように(例えば, (220,284) (284,220)などと
|
9
|
+
(iii)```num1 < num2``` 友愛数の一つの組が一つだけ表示されるように(例えば, (220,284) (284,220)などと
|
10
|
+
表示しされるのを (220,284)だけ表示されるようにする)
|
11
|
+
|
10
12
|
です。
|
11
13
|
|
12
14
|
```python
|
@@ -41,8 +43,9 @@
|
|
41
43
|
12285 14595
|
42
44
|
|
43
45
|
<追記>
|
44
|
-
importを使わずに書く方法です。ただimportを使わなかったら,平方根が出せないのでその分
|
46
|
+
.```import```を使わずに書く方法です。ただ```import```を使わなかったら,平方根が出せないのでその分
|
47
|
+
処理速度が落ちます。そのため、下に書いたコードでは友愛数を```for```文で表示するところでループさせる回数を
|
45
|
-
|
48
|
+
減らしています。
|
46
49
|
|
47
50
|
```python
|
48
51
|
def sum_divisor(n):
|
1
ソースの追加
answer
CHANGED
@@ -38,4 +38,25 @@
|
|
38
38
|
5020 5564
|
39
39
|
6232 6368
|
40
40
|
10744 10856
|
41
|
-
12285 14595
|
41
|
+
12285 14595
|
42
|
+
|
43
|
+
<追記>
|
44
|
+
importを使わずに書く方法です。ただimportを使わなかったら,平方根が出せないのでその分
|
45
|
+
処理速度が落ちます。
|
46
|
+
|
47
|
+
```python
|
48
|
+
def sum_divisor(n):
|
49
|
+
if n <= 1:
|
50
|
+
return 0
|
51
|
+
sum = 1
|
52
|
+
for i in range(2,n):
|
53
|
+
if n % i == 0:
|
54
|
+
sum += i
|
55
|
+
return sum
|
56
|
+
|
57
|
+
for i in range(2,5000):
|
58
|
+
num1 = sum_divisor(i)
|
59
|
+
num2 = sum_divisor(num1)
|
60
|
+
if num2 == i and num1 != num2 and num1 < num2:
|
61
|
+
print(num1,num2)
|
62
|
+
```
|