Pythonアルゴリズム001|k次約数



1.K番目の薬液


ある自然数pとqがある場合、pがqで除算され、残りが0である場合、qはpの約数である.
6を例に
6 ÷ 1 = 6 … 0
6 ÷ 2 = 3 … 0
6 ÷ 3 = 2 … 0
6 ÷ 4 = 1 … 2
6 ÷ 5 = 1 … 1
6 ÷ 6 = 1 … 0
だから6の約数は1 2 3 6で全部で4つです
2つの自然数NとKが与えられると、Nの約数の中で最小数のプログラムが出力される
記入してください.
■説明の入力
最初の行では、NとKはスペースを隔てて与えられる.Nは1以上10000以下である.Kが1 Nより大きい
より低い
■出力説明
第1行は、Nの約数のうちK番目の小数を出力する.Nの約数がK個より少ない場合.
K番目の約数が存在しない場合は、-1を出力します.
■入力例1
6 3
■出力例1
3

<私のコード>

import sys
sys.stdin=open("input.txt", "rt")

a, b=map(int, input().split())

lst = []
for i in range(1,a+1) :
    if a%i==0 :
        lst.append(i)
if len(lst)<b :
    print(-1)
else : 
    print(lst[b-1])
問題では、変数はn,kとして指定されます.
n, k = map(int, input().split())

<解答>

import sys
sys.stdin = open("input.txt", "rt")

cnt=0
for i in range(1, n+1) : 
	if n%i ==0 : 
    	cnt+=1
    if cnt==k : 
    	print(i)
        break
else :
	print(-1)

『反省点』

  • リストにミネラルウォーターを入れると募集団が小さいときは可能ですが、数が増えるにつれて探索時間が長くなるため効率が低下します
  • はk番目が必要であり、その後は中断で終了することが望ましいが、
  • は使用しない.

    『学んだこと』

  • a, b = map(int, input().split())
  • for~else:繰り返し文でbreakが実行されていない場合の動作をelseで定義します.(elseはfor等インデント
  • を表す)

    <第2話毒ガス放出>

    
    n, m = map(int, input().split())
    a=sorted(list([i+1 for i in range(n) if n%(i+1)==0]))
    if m > len(a) :
        print(-1)
    else : 
        print(a[m-1])
    

    <エクストララーニング>


  • list( [ i * 2 if i>3 else i for i in temp ] )
    「2に2を乗じて、3より大きければやるか、そのまま入れます.「for文でtempから持ってきた」

  • list( [ i for i in temp if i > 3 ])
    :elseがいないときはifを後ろに書きます
  • リンクテキスト