下面的代碼將測試用例的數量作為第一個輸入值(a),然后將(a)次2之間的值1≤x≤y≤10^9作為第二個輸入值。代碼的輸出是可被代碼中定義的值整除的值的數量、完全平方數以及滿足兩個條件的值的數量。代碼對于較小的值可以順利運行,但對于較大的值,運行時間會增加。我需要運行時間少于 5 秒。import numpy as npa = np.array(input(), dtype=int)B=[]for i in range(a): b = np.array(input().split(), dtype=int) B.append(b) def is_square(n): return (n**.5).is_integer()for a, b in B: print('{}'.format(sum(v % 12 == 0 for v in range(a, b+1))), '{}'.format(sum(is_square(v) for v in range(a, b+1))),'{}'.format(sum((v % 12 == 0) and is_square(v) for v in range(a, b+1))))
1 回答

滄海一幻覺
TA貢獻1824條經驗 獲得超5個贊
不需要使用 np.array,在這種情況下它不會比內置類型更快(甚至更慢)。其他一些想法:
打印需要時間,因此您可以將結果附加到某個列表并最后打印出來。
將條件結果(可被 12 和完全平方整除)保存到單獨的列表中,然后從這兩個列表中創建一個集合將使第三個條件更快(您將顯著增加內存占用)
這樣的測試效率很低。例如第一個條件:“找到范圍 (a,b) 中可被 12 整除的項目數” - 我會找到該范圍內可被 12 整除的第一個數字(稱為 x ),最后一個數字可被 12 整除(稱為y ),然后
(y-x)/12 + 1
應該產生項目數量;無需檢查所有這些。
第二個和第三個條件,只需生成該范圍內的正方形列表:找到范圍內的最小正方形(稱為x),找到范圍內的最大正方形(稱為y)。進而sum( ((x**2)%12 == 0) for x in range(x,y+1) )
實際上這里沒有太多的編程,更像是數學。如果您收到了請告訴我們。干杯。
添加回答
舉報
0/150
提交
取消