簡體   English   中英

查找數字是否可被輸入數字整除

[英]find if a number divisible by the input numbers

給定兩個數字a和b,我們必須找到可被a或b整除的第n個數字。

格式如下:

輸入:第一行由整數T組成,表示測試用例的數量。 第二行包含三個整數a,b和N

輸出:對於每個測試用例,在新行中打印第N個數字。

限制條件:

1≤t≤105

1≤a,b≤104

1≤N≤10

樣本輸入

1個

2 3 10

樣本輸出

15

說明

可被2或3整除的數字是:2,3,4,6,8,9,10,12,14,15,第十個數字是15

我的密碼

test_case=input()

if int(test_case)<=100000 and  int(test_case)>=1:
    for p in range(int(test_case)):
        count=1
        j=1

        inp=list(map(int,input().strip('').split()))
        if inp[0]<=10000 and  inp[0]>=1 and  inp[1]<=10000 and  inp[1]>=1 and inp[1]<=1000000000 and  inp[1]>=1:
            while(True ):
             if count<=inp[2] :
               k=j
               if j%inp[0]==0 or j%inp[1] ==0:
                   count=count+1
                   j=j+1

               else       :
                   j=j+1
             else:
                 break
            print(k)     
        else:
            break

問題陳述:對於單個測試用例輸入2000 3000 100000,它需要花費一秒鍾以上的時間才能完成。我想如果我能在不到1秒的時間內獲得結果。 有沒有一種省時的方法來解決這個問題,也許可以在這里使用某些數據結構和算法嗎?

我不確定您到底想完成什么。 但是,如果我做對了,答案不就是b *(N / 2)嗎? 由於您要列出兩個數字的倍數,因此Nth將永遠是您列出的第二個時間乘以N / 2。

在最初的示例中,該值為3 * 10/2 = 15。 在代碼示例中,它將是3000 * 100000/2 = 150'000'000

更新:使用set和list來計算所需值的代碼,以加快計算過程。 我仍然想知道,如果有人偶然發現奇數索引,該怎么辦?

a = 2000
b = 3000
c = 100000

a_list = [a*x for x in range(1, c)]
b_list = [b*x for x in range(1, c)]

nums = set(a_list)
nums.update(b_list)

nums = sorted(nums)

print(nums[c-1])

此代碼在我的筆記本電腦上的運行時間為0.14s。 大大低於要求的閾值。 但是,此值將取決於運行代碼的機器。

對於每兩個數字,將存在數字k ,使得k=a*b k下將只有ab倍數。 可以這樣創建該集合:

s = set(a*1, b*1, ... a*(b-1), b*(a-1), a*b)

假設我們取值a=2, b=3然后s = (2,3,4,6) 這些是c的可能值:

[1 - 4]  => (2,3,4,6)
[5 - 8]  => 6 + (2,3,4,6)
[9 - 12] => 6*2 + (2,3,4,6)
... 

請注意,這些值以可預測的模式重復。 要獲得該行,您可以將c的值除以set s的長度(稱為n )。 集合索引是c乘以n的模。 在問題中使用1減去1的索引。

row = floor((c-1)/n)
column = `(c-1) % n`
result = (a*b)*row + s(column)  

Python展示:

a = 2000
b = 3000
c = 100000
s = list(set([a*i for i in range(1, b+1)] + [b*i for i in range(1, a+1)]))
print((((c-1)//len(s)) * (a*b)) + s[(c - 1)%len(s)])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM