1. 程式人生 > >質因數分解

質因數分解

cout 因數分解 () 方法 flag nbsp space 下一個 質因數分解

首先,你得先知道任意一個合數可以拆分成若幹個素數之積

例如: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; }

貌似有更優化的方法,尚未學習,等以後學了再更

質因數分解