国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法通關(guān)村十三關(guān) | 輾轉(zhuǎn)相除法、素?cái)?shù)和丑數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了算法通關(guān)村十三關(guān) | 輾轉(zhuǎn)相除法、素?cái)?shù)和丑數(shù)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 輾轉(zhuǎn)相除法

? ? ? ? 輾轉(zhuǎn)相除法又稱歐幾里得算法,求兩個(gè)數(shù)的最大公因數(shù),希臘數(shù)學(xué)家喜歡用圖形來處理問題,于是將要求最大公約數(shù)問題轉(zhuǎn)化為,以兩個(gè)數(shù)字構(gòu)成矩形,尋找可以鋪滿整個(gè)矩形的最大正方形的邊長問題。

題目

例如8和12的最大公因數(shù)是4,記作gcd(8,12)=4,輾轉(zhuǎn)相除法的規(guī)則是,若r是a%b的余數(shù),則gcd(a,b)= gcd(b,r)。

計(jì)算gcd(546,429)

思路

?????????希臘數(shù)學(xué)家是這樣處理的,在我們預(yù)先構(gòu)造的矩形中,我們先以矩形的短邊構(gòu)造正方形,然后再去計(jì)算這樣的正方形可以在大矩形中「最多」放置多少個(gè),這個(gè)計(jì)算過程可以用取余的方式進(jìn)行計(jì)算。接下來,我們再用長邊余下的長度構(gòu)建正方形,在去試圖鋪滿剩下未被覆蓋的部分,然后計(jì)算這個(gè)正方形最多可以放置幾個(gè),直到我們找到這樣一個(gè)正方形,這個(gè)正方形可以完全鋪滿整個(gè)大矩形。那么這個(gè)正方形就是我們最終要找的答案,自然而然的,這個(gè)正方形的邊長也就是我們要找的兩數(shù)的最大公約數(shù)。

代碼

    /**
     * 輾轉(zhuǎn)相除法
     */
    public int gcd(int a, int b){
        int k = 0;
        do {
            k = a % b;//得到余數(shù)
            a = b;  //根據(jù)輾轉(zhuǎn)相除法,把被除數(shù)賦給除數(shù)
            b = k;  // 余數(shù)賦給被除數(shù)
        }while (k != 0);
        return a; //返回被除數(shù)
    }

2.素?cái)?shù)和合數(shù)

題目

? ? ? ? 素?cái)?shù)又稱質(zhì)數(shù),大于等于2的數(shù),只能被1和自己整除的數(shù)是素?cái)?shù),其余的都是合數(shù),

要求:給定一個(gè)正整數(shù)n(n<10^9),判斷是否是素?cái)?shù)。

思路

從2開始對n進(jìn)行取余測試,看是否出現(xiàn)n%i==0,如果出現(xiàn)就不是,理論上一直測試到n-1,但我們只需要測試到n^(1/2),至于為什么,大家可以思考一下,如果大于n^(1/2)中的一個(gè)數(shù)可以被n整數(shù),其結(jié)構(gòu)必定小于n^(1/2),這個(gè)數(shù)會(huì)被提前找到。

代碼

    /**
     * 素?cái)?shù)和合數(shù)
     */
    public boolean isPrime(int num){
        int max = (int) Math.sqrt(num);
        for (int i = 2; i < max; i++) {
            if (num % i == 0){
                return false;
            }
        }
        return true;
    }

拓展

Leetcode中的204題,用埃氏篩的方法來找素?cái)?shù),找到一個(gè)數(shù),就把這個(gè)數(shù)的整數(shù)倍的數(shù)全部排除,排除完之后白色方塊中剩余的就是素?cái)?shù),下面只是例子,并沒有排除完,

選中2是素?cái)?shù),將2的倍數(shù)的數(shù)都排除(代碼中將數(shù)組的位置標(biāo)記為0)

選中3是素?cái)?shù),將3的倍數(shù)的數(shù)都排除

選中5是素?cái)?shù),將5的倍數(shù)的數(shù)都排除

算法通關(guān)村十三關(guān) | 輾轉(zhuǎn)相除法、素?cái)?shù)和丑數(shù),算法通關(guān)村專欄,算法

代碼2

    /**
     * 埃氏篩
     */
    public int countPrimes(int n){
        int[] isPrime = new int[n];
        Arrays.fill(isPrime,1);
        int ans = 0;
        for (int i = 2; i < n; i++) {
            if (isPrime[i] == 1){
                ans += 1;
                if ((long) i * i < n){
                    for (int j = i * i; j < n; j++) {
                        isPrime[j] = 0;
                    }
                }
            }
        }
        return ans;
    }

4. 丑數(shù)問題

題目

把質(zhì)因子2、3和5的數(shù)稱為丑數(shù),按照從小到大的順序輸出第n個(gè)丑數(shù)

算法通關(guān)村十三關(guān) | 輾轉(zhuǎn)相除法、素?cái)?shù)和丑數(shù),算法通關(guān)村專欄,算法

思路

若n是丑數(shù),n可以寫成n=2^a + 3^b + 5^c的形式,n反復(fù)除以2,3,5,若最后是1,則證明是丑數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-699969.html

代碼

    /**
     * 丑數(shù)問題
     */
    public boolean isUgly(int n){
        if (n <= 0){
            return false;
        }
        int[] factors = {2,3,5};
        for (int factor:factors
             ) {
            while (n % factor == 0){
                n /= factor;
            }
        }
        return n == 1;
    }

到了這里,關(guān)于算法通關(guān)村十三關(guān) | 輾轉(zhuǎn)相除法、素?cái)?shù)和丑數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 輾轉(zhuǎn)相除法——求最大公約數(shù)(易懂詳解)

    輾轉(zhuǎn)相除法——求最大公約數(shù)(易懂詳解)

    定義 最大公因數(shù):也稱最大公約數(shù)、最大公因子,指兩個(gè)或多個(gè)整數(shù)共有約數(shù)中最大的一個(gè)。 輾轉(zhuǎn)相除法:歐幾里得算法又稱輾轉(zhuǎn)相除法,是指用于計(jì)算兩個(gè)非負(fù)整數(shù)a,b的最大公約數(shù)。應(yīng)用領(lǐng)域有數(shù)學(xué)和計(jì)算機(jī)兩個(gè)方面。計(jì)算公式gcd(a,b) = gcd(b,a mod b)。 舉例理解 比如現(xiàn)在要

    2024年02月16日
    瀏覽(20)
  • 【C語言】輾轉(zhuǎn)相除法求最大公約數(shù)(詳解)

    【C語言】輾轉(zhuǎn)相除法求最大公約數(shù)(詳解)

    輾轉(zhuǎn)相除法(又稱歐幾里德算法)是一種用于求解兩個(gè)整數(shù)的最大公約數(shù)的方法。本文將使用C語言來實(shí)現(xiàn)輾轉(zhuǎn)相除法,并對其原理進(jìn)行解釋。 輾轉(zhuǎn)相除法的原理非常簡單。假設(shè)有兩個(gè)整數(shù)a和b,其中a b。通過對a除以b求余數(shù),得到余數(shù)r1。然后把b除以r1求余數(shù),得到余數(shù)r2。如

    2024年02月07日
    瀏覽(21)
  • C語言輾轉(zhuǎn)相除法運(yùn)用 24/1/22筆記錯(cuò)題整理

    C語言輾轉(zhuǎn)相除法運(yùn)用 24/1/22筆記錯(cuò)題整理

    題目: 思路:一開始用最普通的方法去解題,計(jì)算量較大,但是 求最大公約數(shù)常用的有兩種簡單方法,一是九章算術(shù)中的 更相減損術(shù) :大數(shù)減小數(shù)直到相等,相等的數(shù)即最大公約數(shù),該算法 時(shí)間復(fù)雜度約為O(N) ;二是歐幾里得的 輾轉(zhuǎn)相除法 :大數(shù)除以小數(shù)取余數(shù)(相當(dāng)于模

    2024年01月23日
    瀏覽(20)
  • C語言的三個(gè)經(jīng)典題目:三步翻轉(zhuǎn)法、楊氏矩陣、輾轉(zhuǎn)相除法

    C語言的三個(gè)經(jīng)典題目:三步翻轉(zhuǎn)法、楊氏矩陣、輾轉(zhuǎn)相除法

    三步翻轉(zhuǎn)法是C語言中用來求旋轉(zhuǎn)字符串的一種進(jìn)階方法,我們以具體例題對其進(jìn)行介紹。 例:求一個(gè)字符串左旋n個(gè)字符后得到的新字符串 普通方法實(shí)現(xiàn) 我們知道,左旋一個(gè)字符一共分為三步: 將字符串的第一個(gè)字符存放到臨時(shí)變量中; 將字符串中除’\\0’外的所有字符整

    2024年02月02日
    瀏覽(22)
  • C語言:給定兩個(gè)數(shù),求這兩個(gè)數(shù)的最大公約數(shù)(新思路:輾轉(zhuǎn)相除法)

    C語言:給定兩個(gè)數(shù),求這兩個(gè)數(shù)的最大公約數(shù)(新思路:輾轉(zhuǎn)相除法)

    從鍵盤 輸入兩個(gè)數(shù) , 求 這 兩個(gè)數(shù) 的 最大公約數(shù) 。 ? ? ? ? ? ? ? ? ? ?? ?========================================================================= ? ? ? ? ? ? ? ? ? ? ? ? (一). 生成 相關(guān)變量 ; 從鍵盤 輸入兩個(gè)數(shù) ; 再 使用 三目操作符(條件操作符) 找出 較小值 。 ? ? ? ?

    2024年02月09日
    瀏覽(17)
  • 算法通關(guān)村十三關(guān) | 數(shù)組字符串加法專題

    算法通關(guān)村十三關(guān) | 數(shù)組字符串加法專題

    題目:LeetCode66,66. 加一 - 力扣(LeetCode) 我們只需要從頭到尾依次運(yùn)算,用常量標(biāo)記是否進(jìn)位,需要考慮的特殊情況是digits = [9,9,9]的時(shí)候進(jìn)位,我們組要?jiǎng)?chuàng)建長度加1的數(shù)組,首位添加為1即可。 ????????給定兩個(gè)非負(fù)形式的字符串num1和num2,計(jì)算他們的和以字符串形式返

    2024年02月11日
    瀏覽(24)
  • [Go版]算法通關(guān)村第十三關(guān)黃金——數(shù)字?jǐn)?shù)學(xué)問題之?dāng)?shù)論問題(最大公約數(shù)、素?cái)?shù)、埃氏篩、丑數(shù))

    [Go版]算法通關(guān)村第十三關(guān)黃金——數(shù)字?jǐn)?shù)學(xué)問題之?dāng)?shù)論問題(最大公約數(shù)、素?cái)?shù)、埃氏篩、丑數(shù))

    題目鏈接:LeetCode-1979. 找出數(shù)組的最大公約數(shù) 輾轉(zhuǎn)相除法其核心部分為:若r 是a ÷ b的余數(shù),則 gcd(a, b)=gcd(b, r) 題目鏈接:LeetCode-204. 計(jì)數(shù)質(zhì)數(shù) 如果 x 是質(zhì)數(shù),那么大于 x 的 x 的倍數(shù) 2x,3x,… 一定不是質(zhì)數(shù)。 時(shí)間復(fù)雜度分析: 外層循環(huán)的迭代次數(shù)是 n-2,即 O ( n ) O(n) O ( n ) 次

    2024年02月11日
    瀏覽(24)
  • 算法通關(guān)村第三關(guān)——數(shù)組

    從語言實(shí)現(xiàn)的角度: 分為順序型和鏈表型,順序型就是將數(shù)據(jù)存儲(chǔ)在一段固定的空間內(nèi),這樣訪問的效率很高,但是如果要?jiǎng)h除和增加元素的話代價(jià)比較高。 而在鏈表型里,元素之間是通過地址依次連接的,因此訪問時(shí)必須從頭開始逐步向后找,因此查找效率低,而刪除和

    2024年02月11日
    瀏覽(22)
  • 一文看懂什么是歐幾里得算法!多圖演示輾轉(zhuǎn)相除算法究竟是什么!為什么要這樣開展!多圖預(yù)警!

    一文看懂什么是歐幾里得算法!多圖演示輾轉(zhuǎn)相除算法究竟是什么!為什么要這樣開展!多圖預(yù)警!

    ps:全文圖片均為手繪,如果有不標(biāo)準(zhǔn)的地方還望諒解,之后會(huì)慢慢熟悉畫圖工具的,感謝感謝?。。?歐幾里得算法 又稱為 輾轉(zhuǎn)相除法 ,是指用于計(jì)算兩個(gè)非負(fù)整數(shù)a,b的最大 公約數(shù) 。 兩個(gè)整數(shù)的最大公約數(shù)是指能夠同時(shí)整除它們的最大的正整數(shù)。 輾轉(zhuǎn)相除法能夠?qū)崿F(xiàn)效

    2024年02月02日
    瀏覽(41)
  • [Go版]算法通關(guān)村第三關(guān)青銅——不簡單的數(shù)組增刪改查

    [Go版]算法通關(guān)村第三關(guān)青銅——不簡單的數(shù)組增刪改查

    在golang中,切片的底層就是數(shù)組,切片是對底層數(shù)組的引用,當(dāng)傳遞一個(gè)切片給函數(shù)時(shí),實(shí)際上是傳遞了切片的引用。因此,在函數(shù)內(nèi)部修改切片的內(nèi)容會(huì)影響原始切片。 先聲明并初始化一個(gè)長度為當(dāng)前切片長度+1的切片 首部添加:將其余全部向后移動(dòng)一位,然后給首位賦值

    2024年02月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包