1樓:匿名使用者
ac**如下:
#include
int main();
return 0;
估計他的測試資料有10000以上的。
在1l的基礎上加上if(n>=13081)cout<<"13081";
是ac的。
2樓:賊寇在何方
完美數有個公式的。
對於正整數 p >=2,n <=10^300式,當且僅當2^p-1為素數時,n = 2^p-1) *2^(p-1) 是乙個完美數。
所以讓p從2往上遞增,判斷2^p-1為素數,並且 (2^p-1) *2^(p-1) 小於上限時,即可得到乙個素數。
用這個思路對付,就不至於超時了。
3樓:匿名使用者
樓上不懂不要亂說, 菲波那契數列是指數方式增長的, 第5000個數你知道有多少位麼?
正確的程式:
#include
#include
using namespace std;
int main()
return 0;
程式vs2005下執行通過, 測試用例輸出正確。
再, 回覆50573750, 菲波那契數列通項公式為。
f(n)=(1+√5)/2)^n)-(1-√5)/2)^n))/5)
如果這不是指數方式增長, 那是什麼增長?
至於閣下說的清華大學2023年考研資料結構第二題,那題問的是計算菲波那契數列時的時間複雜度, 當然是o(n)了, 但是我說的是這個數列本身的增長, 完全兩碼事啊。
還有, 根本不需要大數乘法, 每次計算的時候取模就行了, 這是最簡單且最常用的演算法。
另, 誠心請教, 大數乘法還有專用庫可以調? 是標準函式庫裡面的還是其他**的?
acm的數論問題(c++)
4樓:網友
你想複雜了吧,這個題就是在二進位制上面做文章。
當乙個數是偶數,除以2就是把二進位制最後的0去掉,這個就不說了。
如果是奇數,加1相當於把二進位制末尾連續的所有的1都變成0,再前一位的0變成1
比如1101001111 加1後變成。
這是很好理解的。
因此這個問題就可以轉化成把數字1前移的問題和去掉0的問題。當最初給的01字串長度為n的時候,最終去掉的0的個數也一定是n,即除二操作的次數一定是n,因此只考慮有多少次1的前移就好了。
由於每次把1前移,都會使得整個01字串的0減少乙個變成1(這裡說的是原01字串與加1後並去掉所有字尾0的字串之間的比較。如10011加1變成10100,去掉字尾0是101,比10011少了個0),因此只要數一下原01字串裡,最右面的乙個1左邊有多少個0即可。如果有m個0,則一共需要(m+1)次加一操作。
m次能去掉m個0,最後一次把全1字串變成1後面若干個0。
最後就是考慮特殊情況,如果輸入是0則輸出1,如果輸入是1則輸出0。其他情況按上面演算法走。
舉例:1010,最右邊的乙個1,即夾在兩個0直接的那個1,它的左邊有乙個0,因此需要兩次加一操作。字串長度為4,因此需要4次除二操作。加在一起,6即是要輸出的答案。
暴力模擬應該也能過的。而且**很可能更簡單。不懂歡迎追問。
5樓:匿名使用者
其實題目已經把最難的部分提示出來了:演算法和二進位制之間有關係。
偶數,/2相當於刪除最末的0
奇數,+1相當於把最後連續為1的續列進製到第乙個0例如1011,最後有2個1,+1後變成1100,連續/2兩次得11,再+1得100,再/2兩次,共1+2+1+2=6次。
一般性演算法:
對最左側啟開始的1不參與計算。
0.步數置0
1.從右向左找到n個1,需要新增1+n步。
4.重複第1步。
大體上**可能如下:
step = 0;
i = n - 1
while (d[i] =0' &i > 0)while (i > 0)
d[i] =1';}
6樓:匿名使用者
該題簡單,先做個標記。
一道acm試題!求解c/c++
c++ 上acm提交的問題,
7樓:網友
兩個錯誤,1. 沒考慮到所有的罐頭加起來都不夠的情況(l要=d)
else
這道c語言acm題目怎麼寫,能不能幫下忙,謝謝哈!!
8樓:袁世平
要求一段區間內的美麗數個數,我們可以先求乙個[0...r]和乙個[0...l-1],然後兩者相減就好。
因為[0...n]感覺性質會很多。
我暫時想到了一種比較暴力的做法:
我們考慮二進位制為n位的美麗數有多少。
n=1 0個。
n=2 "10" 1個。
n=3 "110","101" 2個。
...n=k k-1個。
其實就是c(n,1)-1對吧,從n個位置當中選乙個,但是不能選最高位。
所以發現b<=10^18,也就是b<=2^63,那麼最多只有(1+62)*62/2=1953個美麗數。
那麼我們預先暴力列舉出所有的美麗數,然後乙個乙個判斷是否在區間裡就可以了。
這樣的話,要求資料組數<=1000.
[怎麼暴力列舉美麗數呢?]
美麗數就是2^n-2^k-1 (0=這樣的話,就是乙個暴力的解法了。
應該有更簡單的數字dp方法,還需要思考一會兒。
9樓:網友
這題目太那啥了吧!!貌似題目有問題,乙個整數k代表事例個數,那為啥輸入四卻只有三組事例呢~~~第三個事例是要上天啊,寫了乙個程式,好幾分鐘了還是沒解出來,請問有沒有什麼演算法可以取巧。
初等數論問題
首先你要知道同餘的可加可乘性質,然後直接用定義驗證就可以了。若ac 1 mod m bd 1 mod m 那麼 ab cd 1 mod m 頂多再加一句逆元在同餘意義下是唯一的 也就是良定義的 2 n 1 2 m 1 1 n m時,2 n 1 2 m 1 2 n m 2 m 1 2 n m 1 2 ...
杭電acm2019的c語言問題為什麼提交了卻是
include stdio.h 最好改成 includeint i,a i c語言不支援這種形式。因為n 100的所以你可以這樣寫 const int n 105 int a n 另外提示你的是編譯錯誤。include int main printf 2lf n sum n return 0 杭電a...
C語言問題,C語言問題
符合,相當於一個字元,ascii字元可以直接轉成short整型數字。101 不符合,這是一個字串,不能作為常數。不符合,因為 會對雙引號轉義,找不到另一個雙引號。會出錯。而且就算是 也不符合,因為編譯器會把它理解成一個字串,而非單個字元。e3不符合。019不符合,0開頭代表8進位制數,不能出現9。0...