第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當(dāng)數(shù)字是分?jǐn)?shù)時,使用 Java 找到數(shù)字的完美 p 次冪

當(dāng)數(shù)字是分?jǐn)?shù)時,使用 Java 找到數(shù)字的完美 p 次冪

慕桂英546537 2021-08-25 11:02:00
如果 x 可以表示為另一個數(shù) b^p,我們就說 p 是一個數(shù) x 的完美 p 次冪。即如果 x=b^p ,則 p 是 x 的完美 p 次方。我很少有 x 可以是正整數(shù)、負(fù)整數(shù)甚至分?jǐn)?shù)的用例。前兩種情況在 java 中很容易處理,但是當(dāng) x 是分?jǐn)?shù)時,如何使用 java 找出數(shù)字 x 的完美 p 次方。如果 x 是一個分?jǐn)?shù),我們可以簡單地使用 Math.sqrt(x) 并得到一個數(shù)字 b 使得 b^2 =x 是不是真的?那么 2 將是 x 的完美 p 次方。這個案例是否有效?我不一定在尋找代碼,而是在 x 是分?jǐn)?shù)時確定 java 中 x 的完美 p 次冪的邏輯。如果有人認(rèn)為此案例無效,也請說明您的理由。下面是我編寫的代碼,用于處理 x 是正整數(shù)或 0 到 1 之間的數(shù)字的情況。但是我們可以處理 x 是的情況,例如。45.487,875515.54884,等等?public class PerfectPower {public PerfectPower() {    }    public Integer getPerfectPower(double x){        // x=b^p        int p = 0;        double b;        if(x==0){            throw new IllegalArgumentException("Cannot accept number 0.");        }        if (x > 1) {            for (b = 2; b <= x; b++) {                double value = 0;                p = 1;                while (value <= x) {                    value = Math.pow(b, p);                    if (value == x) {                        return p;                    } else if (value > x) {                        break;                    } else {                        p++;                    }                }            }        } else if(x>0 && x<1){            for (b = 2; (1/b) >= x; b++) {                double value = 1;                p = -1;                while (value >= x) {                    value = Math.pow(b, p);                    if (value == x) {                        return p;                    } else if (value < x) {                        break;                    } else {                        p--;                    }                }            }        }        return null;    }
查看完整描述

2 回答

?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗 獲得超10個贊

我們可以使用對數(shù)以簡單的方式做到這一點。它如下:


x = b^p    log(base b)x = p     log x/log b = p  

所以我們可以通過 x 迭代 b = 2 并檢查 p 是否是一個完美的整數(shù)并返回值。對于十進(jìn)制情況,我們可以進(jìn)一步調(diào)整日志公式。


log b = (log x)/p    Hence b = 10^(log x)/p) 

在每次迭代中,我們可以檢查是否 b^p = x 以及是否返回 p。我解決了這個問題,假設(shè) p 應(yīng)該是一個整數(shù)。然而,對于 p 可以是十進(jìn)制而 x 在 0 到 1 之間的情況,這個解決方案應(yīng)該進(jìn)一步調(diào)整。下面是我在 Scala 中實現(xiàn)的代碼。


def perfectpowerlog(x: Double): Double = {

    var i: Double = 2

    var n: Double = 1

    var p: Double = 0

    val loop = new Breaks

    if (x == 1) {

        return n

    }

    if (x.ceil == x) {

        loop.breakable {

            while (i<=x) {

                p = math.log(x)/math.log(i)

                if (p.toInt == p) {

                    n = p

                    loop.break()

                }

                else

                    i=i+1

            }

        }

    }

    else {

        loop.breakable {

            while(i<=x.ceil) {

                p = pow(10,(log10(x)/i))

                if(pow(p,i) == x) {

                    n = i

                    loop.break()

                }

                else

                    i = i+1

            }

        }

    }

    return n

}


查看完整回答
反對 回復(fù) 2021-08-25
?
嗶嗶one

TA貢獻(xiàn)1854條經(jīng)驗 獲得超8個贊

由于 45 487.875 515 548 84(以此為例)不是整數(shù),所以它可以表示為 b ^ p 其中 b 和 p 是整數(shù)的唯一方法是如果 p 是負(fù)數(shù)。也就是說,您的數(shù)字可能是某個(大)整數(shù)的平方根、立方根、四次根等。

第一個問題是精度問題。您的數(shù)字無法用 Java 雙精度精確表示。您可以使用BigDecimal. 它也不能恰好是某個整數(shù)的某個根,因此您必須決定接受的容差。

據(jù)我所知,你的大問題是可能的 p 值的范圍是無限的。甚至可能所有數(shù)字都足夠接近某個(大)整數(shù)的第 p 個根,而您無法合理區(qū)分;我不知道,這肯定取決于你的容忍度。

我認(rèn)為您可以嘗試的最好方法是將您的數(shù)字提高到 2、3、4 等,然后看看您何時接近整數(shù)。如果您的 q 次冪足夠接近整數(shù),則返回 -q 作為您的 p。在你失去耐心之前停止搜索。:-)


查看完整回答
反對 回復(fù) 2021-08-25
  • 2 回答
  • 0 關(guān)注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號