2025年なのでpythonで2025に関する計算をしてみた

# はじめに

[こちら](https://qiita.com/murasaki1994/items/ff7f7ced109107503b75)の記事を見ていて面白いなと思ったので 2025 に関する計算を いくつか python のコードで作成してみました。

# やってみたこと

-   素因数分解
-   約数の個数
-   約数の総和
-   平方数かどうか
    -   平方数の場合
        -   奇数の和として表すことができる
        -   立法数の和としても表すことができる
-   立法数かどうか

ぱっと思いついたものがこれくらいだったので、これらの内容について python のコードで確認していきます。他にもこんなものがあるよって方はコメントで教えていただけると幸いです。

# 実際のコード

```python
# 変数の設定
year = 2025

# 素因数分解
from collections import defaultdict
def prime_factorize(n):
    if n == 1:
        return print("1は素数ではありません")
    elif n == 2:
        return print("2は素数です")
    else:
      pows = defaultdict(int)
      i = 2
      # 以下の処理を繰り返す
      # 1. 自然数nが1に等しいか確認する
      # 2. nがi(初期値2)で割り切れるか確認する
      # 3. iで割り切れる限り2.を繰り返す
      # 2. iで割り切れなくなったらiを1増やして1.の操作を繰り返す
      # 3. nが1になったら終了
      while n != 1:
        while n % i == 0:
          pows[i] += 1
          n //= i
        else:
          i += 1

      return pows

def format_prime_facttorization(n):
  prime_facttorization = prime_factorize(n)
  format = ""
  for k,v in prime_facttorization.items():
    format += f"{k}^{v} * "
  return format[:-3]

# 約数の個数を求める
def count_divisors(n):
  count = 0
  for i in range(1, n + 1):
    if n % i == 0:
      count += 1
  return count

# 約数の総和を求める
def sum_of_divisors(n):
  sum = 0
  for i in range(1, n+1):
    if n % i == 0:
      sum += i
  return sum

# 与えられた数が平方数かどうか判定する
def is_square(n):
  prime_factorization = prime_factorize(n)
  for v in prime_factorization.values():
    if v % 2 != 0:
      return False
  return True

# 与えられた数を奇数の和で表す
def sum_square(n):
  if not is_square(n):
    print(f"{n}は奇数の和の形で表せません")
  else:
    square_sum = 0
    for odd in range(1, n+1, 2):
      square_sum += odd
      if square_sum != n:
        continue
      else:
        ans = "n="
        for i in range(1,odd+1,2):
          if i != odd:
            ans += f"{i} + "
          else:
            ans += f"{i}"
        print(ans)

# 与えられた数を立法数の和で表す
def sum_cube(n):
  if not is_square(n):
    print(f"{n}は立法数の和の形で表せません")
  else:
    cube_sum = 0
    for i in range(1, n+1):
      cube_sum += i ** 3
      if cube_sum != n:
        continue
      else:
        ans = "n="
        for j in range(1,i+1):
          if j != i:
            ans += f"{j}^3 + "
          else:
            ans += f"{j}^3"
        print(ans)

# yearが平方数かどうか
if is_square(year):
  print(f"{year}は平方数です")
  sum_square(year)
  sum_cube(year)
else:
  print(f"{year}は平方数ではありません")

# 与えられた数が立法数かどうか判定する
def is_cube(n):
  prime_factorization = prime_factorize(n)
  for v in prime_factorization.values():
    if v % 3 != 0:
      return False
  return True



# 2025を素因数分解する
print("素因数分解:" , end = " ")
format_prime_facttorization(year)

# 2025の約数の個数を出力
count_divisors(year)

# 2025の約数の総和
print("約数の総和：", end = " ")
print(sum_of_divisors(year))

# 平方数かどうかの判定
if is_square(year):
  print(f"{year}は平方数です")
  print("奇数の和に和による表示:", end = " ")
  sum_square(year)
  print("立法数の和による表示:", end = " ")
  sum_cube(year)
else:
  print(f"{year}は平方数ではありません")

# 立法数かどうかの判定
if is_cube(year):
  print(f"{year}は立法数です")
else:
  print(f"{year}は立法数ではありません")
```

出力結果

```
素因数分解: 約数の総和： 3751
2025は平方数です
奇数の和に和による表示: n=1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 + 21 + 23 + 25 + 27 + 29 + 31 + 33 + 35 + 37 + 39 + 41 + 43 + 45 + 47 + 49 + 51 + 53 + 55 + 57 + 59 + 61 + 63 + 65 + 67 + 69 + 71 + 73 + 75 + 77 + 79 + 81 + 83 + 85 + 87 + 89
立法数の和による表示: n=1^3 + 2^3 + 3^3 + 4^3 + 5^3 + 6^3 + 7^3 + 8^3 + 9^3
2025は立法数ではありません
```

# 感想

2025 って平方数なんだ、表示方法を考えてみるといろいろなことがわかって楽しかったです。
コードはもっと簡潔に書ける部分もあると思うし、性質についても他にもこんな性質があるよとか、こんな性質あるんじゃない？みたいなことがあると思うので何かあったら是非コメントで教えてください。

#