題目重述
已知正整數n
nn是兩個不同的質數的乘積,試求出兩者中較大的那個質數。
其中n ≤2
×109
n≤2×10^9
n≤2×10
9當然我的思路就真的非常直接了,迴圈兩個乘數,滿足乘積正確,並且判斷兩數為質數,**如下:
#include
using
namespace std;
bool
isprime
(int x)
//判斷是否為質數(布林變數)
}return k;
}int
max(
long
long i,
long
long j)
//取符合要求的最大值
intmain()
}}return0;
}
當然結果是沒有問題的,但是測試結果如下:
d 說明在演算法上這個**很冗雜! 使用了迴圈巢狀,時間複雜度o(n
2)o(n^2)
o(n2
)於是我想只用一次迴圈實現這個過程:只迴圈i
ii變數(從2到sqr
t(x)
sqrt(x)
sqrt(x
))並判斷是否為x的因數,如果是,再判斷是否為質數,滿足要求的話,i
ii就一定是這兩個乘數中最小的那個,於是x/i
x/ix/
i也就是我們所求的結果。
#include
using
namespace std;
bool
isprime
(int x)
}return k;
}int
main()
}return0;
}
其實再由題目要求,輸入的資料已經滿足質數相乘,所以可以省去判斷質數的函式,本題**如下:
#include
using
namespace std;
intmain()
}return0;
}
質因數分解
題目16 將乙個正整數分解質因數。例如 輸入90,列印出90 2 3 3 5。程式分析 對n進行分解質因數,應先找到乙個最小的質數k,然後按下述步驟完 成 1 如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。2 如果n k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新...
質因數分解
短除法 求乙個數分解質因數,要從最小的質數除起,一直除到結果為質數為止。分解質因數的算式的叫短除法 和除法的性質差不多,還可以用來求多個個數的公因式 求 最大公因數的一種方法,也可用來求 最小公倍數。求幾個數最大公因數 的方法,開始時用觀察比較的方法,即 先把每個數的因數找出來,然後再找出公因數,最...
質因數分解
講乙個數分解為幾個質數相乘的結果 int a maxn 用來存質因數 int b maxn 用來存質因數的個數 int main if n 1 不能忘記這一步操作 輸出 第1種寫法 a a a b b b b c c printf 第一種寫法 for int i 1 i tot i else pri...