ACM C 問題,ACM的數論問題(C )

2023-04-16 04:30:02 字數 2937 閱讀 3545

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...