先预处理10^8以下的所有素数
#include <stdio.h>
#include <string>
#include <cstring>
#include <queue>
#include <algorithm>
#include <functional>
#include <vector>
#include <iomanip>
#include <math.h>
#include <iostream>
#include <sstream>
#include <time.h>
#include <stack>
#include <set>
#include <map>
#include <time.h>
#include <bitset>
using namespace std;
vector<int> Prime;
bool vis[1000000005];
void GetPrime(int n)
{
int m=sqrt(n+0.5);
memset(vis,false,sizeof(vis));
for (int i=2; i<=m; i++)
if (!vis[i])
for (int j=i*2; j<=n; j+=i)
vis[j]=true;
for (int i=2; i<=n; i++)
if (!vis[i])
Prime.push_back(i);
}
int main()
{
int Range=100000000;
GetPrime(Range);
int X,Sz=Prime.size(),i;
cout<<"预处理完毕,范围:1 - "<<Range<<",得到"<<Sz<<"个质数.\n";
while (cin>>X)
{
vector<int> Ans;
int temp=X;
while (temp!=1)
{
for (i=0; i<Sz; i++)
if (temp%Prime[i]==0)
{
Ans.push_back(Prime[i]);
temp/=Prime[i];
break;
}
if (i==Sz&&temp!=1)
break;
}
cout<<X<<" = ";
for (int j=0; j<(int)Ans.size(); j++)
cout<<Ans[j]<<(j==(int)Ans.size()-1?"\n":" * ");
}
return 0;
}
质因数分解
最新推荐文章于 2020-10-30 18:11:05 发布