质因数分解

首先,你得先知道任意一个合数可以拆分成若干个素数之积

例如:24=2*2*2*3

然后就简单了,我是先取得一定量的素数(用之前写的素数筛),而后看能否整除,能就继续,不能就除下一个素数。

 

贴代码:

#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;

int main()
{
    //先筛素数
    int num=0;
    int prime[10000];                   //用于存放素数
    int flag[10005];                    //用于判断i是否为素数
    memset(flag,0,sizeof(flag));
    for(int i=2;i<=10000;i++){
        if(flag[i]==0){
            prime[num++]=i;
            for(int j = i+i; j<=10000; j+=i)
                flag[j]=1;
        }
    }
    int n;                          //合数
    cin>>n;
    cout<<n<<"=";
    int p=0;
    bool q=0;                       //用于处理第一个输出的数
    while(n!=1){
        if(n%prime[p]==0){
            if(q==0){
                cout<<prime[p];
                q++;
            }
            else{
                cout<<"*"<<prime[p];
            }
            n=n/prime[p];
        }
        else
            p++;
    }
    return 0;
}

貌似有更优化的方法,尚未学习,等以后学了再更

 

posted @ 2017-11-15 11:21  Eastruo  阅读(440)  评论(0编辑  收藏  举报