因数分解

因数分解题目:各位在國小時都學過因數分解,都瞭解怎麼樣用紙筆計算出結果,現在由你來敎電腦做因數分解。因數分解就是把一個數字,切分為數個質數的乘積,如12=2^2*3其中,次方的符號以^來表示各位在國小時都學過因數分解,都瞭解怎麼樣用紙筆計算出結果,現在由你來敎電腦做因數分解。因數分解就

大家好,欢迎来到IT知识分享网。因数分解"

题目:

各位在國小時都學過因數分解,都瞭解怎麼樣用紙筆計算出結果,現在由你來敎電腦做因數分解。

因數分解就是把一個數字,切分為數個質數的乘積,如 12=2^2 * 3

其中, 次方的符號以 ^ 來表示

 

输入说明

一個整數, 大於1 且 小於等於 1000000

输出说明

一個字串

范例输入
20
17
999997

范例输出
2^2 * 5
17
757 * 1321

分析:用两个数组a,b,a[i] 和 b[i] 分别存储由小到大排序的第i个质因数及其指数。对于每一个质因数,都会一次性“提取”干净,这样,接下去最近遇到的总是质数,如果能整除当前剩下的数now,该数就是now的质因数……如此进行下去,直到候选质数超过sqrt(n)。

代码:

 1 #include <iostream>
 2 #include <math.h>
 3 using namespace std;
 4 int a[10000],b[10000];
 5 int temp,now,tot;
 6 int main(){
 7     int n;
 8     while(cin>>n){
 9         temp=(int)((double)sqrt(n)+1);
10         now=n;
11         tot=0;
12         for(int i=2;i<=temp;++i){
13             if(now%i==0){
14                 a[++tot]=i;
15                 b[tot]=0;
16                 while(now%i==0){
17                     ++b[tot];
18                     now/=i;
19                 }
20             }
21         }
22         if(now!=1){
23             a[++tot]=now;
24             b[tot]=1; 
25         }
26         for(int i=1;i<tot;i++){
27             if(b[i]==1) cout<<a[i]<<" * ";
28             else cout<<a[i]<<"^"<<b[i]<<" * ";
29         }
30         if(b[tot]==1) cout<<a[tot]<<endl;
31         else cout<<a[tot]<<"^"<<b[tot]<<endl;
32     }
33     return 0;
34 }

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32062.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信