神奇的235數

2021-09-01 08:52:31 字數 1245 閱讀 6106

當乙個數n的質因子只含有2,3,5的時候,我們可以將n稱為235數(事實上叫醜數)。

那麼,問題來了,給你乙個數n,你能求出第乙個大於等於n的235數是多少嗎?程式設計解決這個簡單的問題吧~

輸入多組輸入

第1行:乙個數t,表示後面用作輸入測試的數的數量。(1 <= t <= 30000)

第2 - t + 1行:每行1個數n(1 <= n <= 10^18)

輸出共t行,每行1個數,輸出》= n的最小235數。

分析:本題,我卡了許久許久,要不答案錯誤,要不時間超限。本地的基本思路為打表,不過此打表也是要有點技術的打表。不是一般的打表。我在打表之後,發現時間還是超限。最終有借助二分查詢法得出最後的結論。真的是可怕。

#include"stdio.h"

long long a[13000];

long long count=1;//打表的個數下標

long long min(long long chen2,long long chen3,long long chen5)//判斷最小的

long long find()//開始打表

for(i=0; ia[count-1])

for(i=0; ia[count-1])

a[count]=min(chen2,chen3,chen5);//將以上三個數中的最小數放入陣列中

count++;//表下標

if(a[count]>=1e18)//當數大於1e18了,就可以退出了

break;

}}long long er(long long m,long long min,long long end)//這裡是二分查詢

if(a[mid]>m)

else

}return a[mid];

}int main()}}

}

but當我看了其他人的程式後,內心**,真的絕望。我發現他們的打表是十分簡潔的。以至於他們不需要使用二分查詢。現將**複製如下:

#includelong long min(long long x,long long y)//查詢最小值

long long fun(long long n,long long *num)

}void find(long long n,long long *num,int *index)//直接查詢下標。沒有使用二分

}int main()

return 0;

}

醜數(因子只有 2 3 5 的數)

理解題意關鍵 如果說乙個數的因子只有 2 3 5 那麼反過來想,這個數一定是由若干個 2 3 5 相乘得到的,所以每一次只需要找出當前所有已知醜數中由2 3 5 相乘可以得到的最小的數即可。也就是說每乙個醜數,都可以由之前的醜數乘 2 3 5 得到。具體做法 設定三個指標,初始他們都指向第乙個醜數 ...

只包含因子2 3 5的數

k的因子中只包含2 3 5。滿足條件的前10個數是 2,3,4,5,6,8,9,10,12,15。所有這樣的k組成了乙個序列s,現在給出乙個數n,求s中 給定數的最小的數。例如 n 13,s中 13的最小的數是15,所以輸出15。input 第1行 乙個數t,表示後面用作輸入測試的數的數量。1 t ...

例題分享 2 3 5抽數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。主要就是利用類似於遞迴的思想,或者說是分解 法的方法。方法一 每乙個醜分解之後只有2 3 5,假設乙個數是x,有x 2 i...