免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
算法專題(8)-其他數學相關內容

摘要

    其他相對比較常用的數學相關內容有:表達式求值、最大公約數與最小公倍數問題、質數與質因數分解問題等。

1
知識點梳理
? 表達式求值:
         表達式求值,即用字符串給定一個表達式,然后求解表達式的值。表達式求解的方式大致有兩種:一種為模擬,一種為分治。
        模擬法進行表達式求值時,建立兩個棧,一個存放數值,一個存放運算符。掃描表達式,如果遇到數值,直接存入數值棧,遇到運算符,判斷與棧頂運算符優(yōu)先級,如果高于棧頂運算符,則存入運算符棧,否則,執(zhí)行下面操作,直到當前運算符優(yōu)先級高于棧頂運算符或棧為空。具體操作為:彈出當前棧頂運算符,并在數據棧中彈出相應數據(一般為兩個,特殊情況如階乘只有一個),做運算后,將運算結果存入數值棧。最后,依次彈出并執(zhí)行運算符棧中的運算符,完成后,數據棧中僅存的數據,即為最終結果。需要注意的是,括號的棧外優(yōu)先級和棧內優(yōu)先級不同,一般運算優(yōu)先級見下表。

        分治法進行表達式求值時,對于表達式進行掃描,找出優(yōu)先級最低的運算法,遞歸處理該運算符左右的表達式,然后進行該運算符的運算。

? 最大公約數與最小公倍數:
        求解最大公約數用的是輾轉相除法。用的依據是,如果正整數c是a和b的公約數,那么c也是b和a mod b的公約數。公式如下:

最小公倍數即兩數相乘除以它們的最大公約數。

? 質數與質因數分解:
        質數又稱素數。指在一個大于1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。判斷數k是否為質數,一般是掃描2到根號k內的整數,看是否能整除k,如果有,則k不是質數,否則k為質數。也可建立2到根號k的質數表用來掃描。找出區(qū)間2~n之間的所有質數,即建立2~n的質數表時,從小到大掃描,當遇到質數時,將其倍數刪去,最后剩余的數即為質數表上的數。
質因數分解一般有兩種方法:方法一:產生一個從2到根號k的質數表,然后從2開始除。在除干凈之后換下一個因數。方法二:不產生質數表,直接從2開始除。在除干凈之后換下一個因數。(注:n是素數時速度會非常慢)

2
重難點分析
2.1  表達式求值,需要先做出運算符優(yōu)先級表,再進行代碼編寫。
2.2  表達式求值有時需要配合高精度,建議寫成模塊形式,方便操作。
2.3  表達式求值、最大公約數、質數問題等,基本只需要套用模板即可,平時注意整理此類模板,會省力很多。

3
例題解析
例題3-1:等價表達式(NOIP2005)
        【問題描述】明明進了中學之后,學到了代數表達式。有一天,他碰到一個很麻煩的選擇題。這個題目的題干中首先給出了一個代數表達式,然后列出了若干選項,每個選項也是一個代數表達式,題目的要求是判斷選項中哪些代數表達式是和題干中的表達式等價的。
這個題目手算很麻煩,因為明明對計算機編程很感興趣,所以他想是不是可以用計算機來解決這個問題。假設你是明明,能完成這個任務嗎?
這個選擇題中的每個表達式都滿足下面的性質:
1. 表達式只可能包含一個變量‘a’。
2. 表達式中出現的數都是正整數,而且都小于10000。
3. 表達式中可以包括四種運算‘+’(加),‘-’(減),‘*’(乘),‘^’(乘冪),以及小括號‘(’,‘)’。小括號的優(yōu)先級最高,其次是‘^’,然后是‘*’,最后是‘+’和‘-’?!?’和‘-’的優(yōu)先級是相同的。相同優(yōu)先級的運算從左到右進行。(注意:運算符‘+’,‘-’,‘*’,‘^’以及小括號‘(’,‘)’都是英文字符)
4. 冪指數只可能是1到10之間的正整數(包括1和10)。
5. 表達式內部,頭部或者尾部都可能有一些多余的空格。
下面是一些合理的表達式的例子:
((a^1) ^ 2)^3,a*a+a-a,
((a+a)),
9999+(a-a)*a,
1 + (a -1)^3,
1^10^9,
……
【輸入】輸入的第一行給出的是題干中的表達式。第二行是一個整數n (2≤n≤26),表示選項的個數。后面n行,每行包括一個選項中的表達式。這n個選項的標號分別是A,B,C,D……輸入中的表達式的長度都不超過50個字符,而且保證選項中總有表達式和題干中的表達式是等價的。
【輸出】輸出僅一行,這一行包括一系列選項的標號,表示哪些選項是和題干中的表達式等價的。選項的標號按照字母順序排列,而且之間沒有空格。
【樣例輸入】
( a + 1) ^2
3
(a-1)^2+4*a
a + 1+ a
a^2 + 2 * a * 1 + 1^2 + 10 -10 +a -a
【樣例輸出】
AC
【分析】這道題目拿到手后,一般可以想到的方法就是可不可以將所有的表達式全部轉化為最簡形式,這時,你就想到了一種一般的解決方案。即將所有的表達式全部化為最簡,然后再計算,這種方法是一種準確的方法。但要在考場上實現,有一些麻煩,需要一些時間。這種方法的解決過程是:先將階乘化乘,再展開。計算同時合并同類項,留下一個數組。然后比較每一個表達式的數組與題目數組是否相同,時間效率也并不高。那么怎么辦呢?
我們這里介紹一種利用必要條件的解決方案。
即兩個表達式如果等價,那么無論a為何值,兩個表達式計算出的值都相等。這時,我們以不同的a值代入各式,可以快速排斥那些不同的表達式,留下的便是等價的了。
我們怎樣取值呢?這里推薦幾種有效的方法:
1)取隨機函數生成的數列。這種方法比較有效,無規(guī)律。
2)取偽隨機數列。這是一種比較便于人工控制的手段。
3)取實數。由于其他皆為整數,小數部分便成為判斷的優(yōu)越條件。
對于1、2兩種情況,有時表達式求解出的解會很大,應考慮對一個大素數取余數比較(由于沒有除法,所以取余不會出錯)。一般情況下取4~7組值便可通過極大部分情況。如果取更多組的值,便可以通過幾乎所有的情況。
在上述分析完成后,剩下就是表達式求解的過程??捎媚M法或者分治法求解,此處略過。

例題3-2:Hankson的趣味題(NOIP2009)
        【問題描述】Hanks博士是BT(Bio-Tech,生物技術)領域的知名專家,它的兒子明教Hankson?,F在,剛剛放學回家的Hankson正在思考一個有趣的問題。
        今天在課堂上,老師講解了如何求兩個正整數c1和c2的最大公約數和最小公倍數?,F在Hankson認為自己已經熟練地掌握了這些知識,它開始思考一個“求公約數”和“求公倍數”之類問題的“逆問題”,這個問題是這樣的:已經正整數a0, a1, b0, b1,設某未知正整數x滿足:
1. x和a0的最大公約數為a1;
2. x和b0的最小公倍數為b1;
Hankson的“逆問題”就是求出滿足條件的正整數x。但稍加思索后,它發(fā)現這樣的x并不唯一,甚至可能不存在。因此他轉而開始考慮如何求解滿足條件的x的個數。請你幫助他編程求解這個問題。
【輸入】第一行為正整數n,表示有n組數據。接下來,的n行,每行一組數據,為四個正整數a0, a1, b0, b1,每兩個整數之間用一個空格隔開。輸入數據保證a0能被a1整除,b1能被b0整除。
【輸出】共n行。每行只有一個整數,即該組數據的結果。對于每組數據,輸出滿足條件的x的個數,若不存在這樣的x,則輸出0。
【樣例輸入】
2
41 1 96 288
95 1 37 1776
【樣例輸出】
6
2
【分析】這道題的思路就是分解質因數。
首先,不難得到gcd(x/a1,a0/a1)=1以及gcd(b1/x,b1/b0)=1。
假設對于一個質因數y,a0含有a0c個y,a1含有a1c個y,b0含有b0c個y,b1含有b1c個y。
那么不難得到,如果a0c<a1c,那么就無解;如果a0c=a1c,那么x至少含有a1c個y;如果a0c>a1c,那么x只可能含有a1c個y。
同理,如果b1c<b0c,那么就無解;如果b1c=b0c,那么x至多含有b1c個y;如果b1c>b0c,那么x只可能含有b1c個y。
由此,可以求出對于每一個質數,x可能含有幾個它,并求出一共有多少種選擇方式。然后根據乘法原理,將每一個質數的選擇方案數乘起來,就得到了答案。
有任何問題請留言給我們或者直接回復本公眾號~歡迎與我們互動。
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C語言陷阱和缺陷
C語言缺陷與陷阱(筆記)
C++ Primer第四章表達式
C語言有大約40個運算符,最常用的有這些
JavaScript中運算符的優(yōu)先級
學習比較-----運算符優(yōu)先級
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服