百練 / 2017研究生推免上機考試 A:因子分解
阿新 • • 發佈:2019-01-03
注:百練上已經結束的比賽只能看到題目但不能提交。但其實百練上所有比賽的題目都是openjudge題庫裡的,因此可以在百度上搜索
“#題目描述文字# site: openjudge.cn”
(site: openjudge.cn表示限定在site:openjudge.cn的站點中查詢)在openjudge的其他小組中查到這道題目。申請加入該小組就能提交了。
-----------------------------------------------------
因子分解
-----------------------------------------------------
總時間限制:
1000ms
記憶體限制
65536kB
描述
輸入一個數,輸出其素因子分解表示式。
輸入
輸入一個整數 n (2 <= n < 100)。
輸出
輸出該整數的因子分解表示式。表示式中各個素數從小到大排列。如果該整數可以分解出因子a的b次方,當b大於1時,寫做 a^b ;當b等於1時,則直接寫成a。
樣例輸入
60
樣例輸出
2^2*3*5
-----------------------------------------------------
解題思路
由於最大輸入在100以內,故可以手動列舉100以內的質數表。“質數-冪次”的資料結構用map儲存。
-----------------------------------------------------
程式碼
#include<stdio.h> #include<map> #include<string> using namespace std; static int zhiShu[29] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,77,79,83,89,97}; int main() { int n = 0; scanf("%d", &n); map<int,int> fenJie; // 不像java,C++例項化map的時候不要new map<int,int>::iterator it; int oldValue = 1; int i=0; for (i=0; i<29; i++) { while(n%zhiShu[i]==0) { n /= zhiShu[i]; fenJie[zhiShu[i]]++; // 不管鍵值zhiShu[i]在不在map中,都只要這樣寫就行了,非常方便 } if(n == 1) { break; } } for (it = fenJie.begin(); it!= fenJie.end(); it++) { if(it != fenJie.begin()) { printf("*"); } printf("%d", it->first); if(it->second != 1) { printf("^%d", it->second); } } return 0; }