簡體   English   中英

如何在小於O(n)時間復雜度的情況下找到第N個Armstrong數?

[英]How to find Nth Armstrong number in less than O(n) time complexity?

阿姆斯特朗數的序列是1,2,3,4,5,6,7,8,9,153 ...如果可能的話,如何在小於O(n)時間復雜度的情況下找到第N個阿姆斯特朗數。

我嘗試了從1遍歷到max_int並檢查iTH編號是否為armstrong的方法,如果是,則將其計數並添加到列表中。 然后返回list [n-1]作為第n個Armstrong編號。

這可能不是最佳的解決方案,但按照文章,

由D.Winter在1985年證明並由D.Hoey驗證,在第10個基數中總共存在88個自戀(阿姆斯壯)數字。

因此,可能您可以將這些數字添加到列表中,並使用它返回第n個阿姆斯壯數字。 這樣,返回第n個數字只需要O(1)時間。

它可以避免遍歷所有數字並檢查是否為阿姆斯壯數字。

另外,根據您使用的編程語言,您可能不需要全部88個數字,因為某些數字太長(39位數字)並且可能不受許多語言支持。

無需檢查所有排列。 如果您嘗試[1,2,3,4],則檢查結果數位排序后的結果數是否等於1234。例如,[3,2,1,4]不需要任何其他排列。 這降低了因數n的復雜度! 其中n是位數。 例如,以這種方式將所有9位數字貼在臉上需要大約28e3支票,而不是1e9。

暫無
暫無

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

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