質因數分解
阿新 • • 發佈:2017-11-15
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; }
貌似有更優化的方法,尚未學習,等以後學了再更
質因數分解