
※(1)は省略します…
最終的な回答
def f(n):
return n % 7
def g(n):
sigma = 0
for k in range(1,8):
sigma += k**n
return 3 * f(sigma)
n = 0
score = 0
while score <= 0:
n += 1
score = g(n)
print("私の好きな自然数はn={}です。g({})={}点ください。".format(n,n,score))
コード作成の手順
関数の定義

問題文冒頭をよく読んで、関数f(n)とg(n)を定義します。
f(n) を定義する
まずはf(n)です。
「nを7で割った余り」なので,演算子「%」が使えます。
例えば
23 % 5
#出力:3
は「23を5で割った余り」を表しています。
というわけで,f(n)の定義は下のように書けます。
def f(n):
return n % 7
g(n) を定義する
今度は g(n) を定義していきます。
まず ∑ の計算をしていきます。
今回の ∑ は
1n+2n+……+7n
の計算を表しています。
というわけで,この
1n+2n+……+7n
を変数 sigma に代入しようと思います。
ひとまず sigma = 0 としておき,for文のループ処理で
kn にk=1,2,……,7 を代入して変数 sigma に順次加えていきます。
def g(n):
sigma = 0
for k in range(1,8):
sigma += k**n
return 3 * f(sigma)
そして最後に, f(n) へ sigma を代入したものを3倍して終わりです。
点数が0点より大きくなるnを探す
nを1からどんどん大きくしていって、”1点”でも点数がもらえるような自然数nを探していきます。
変数 n と score を用意しておいて,初期値はどちらも 0 にしておきます。
score の値が0以下となっている間はずーっとnを1ずつ増やしながら g(n) を調べていきたいので,while文で処理します。
n = 0
score = 0
while score <= 0:
n += 1
score = g(n)
答えを書く!
そして,score の値が正になったら答えを出力していきます。
print("私の好きな自然数はn={}です。g({})={}点ください。".format(n,n,score))
#もしくは…
print("私の好きな自然数はn={0}です。g({0})={1}点ください。".format(n,score))
print("私の好きな自然数はn=" + str(n) + "です。g(" + str(n) + ")=" + str(score) + "点ください。")
ということで答えは
私の好きな自然数はn=6です。g(6)=18点ください。
となりました…!
おまけ:nがどんな数のときに点数がもらえるか?
今回出た結果ではn=6となりましたが,必ずしも6である必要はありません。
こちらのコードを使って,点数が正の数となるnを調べてみましょう。
score_ = 0
for i in range(1,101):
score = g(i)
if score > 0:
print(i)
このコードを実行すると,
6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96
となりました。
ということは,nが6の倍数であれば,ちゃんと点数がもらえるわけですね。

記事への意見・感想はコチラ