#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int Maxn = 100010; //int最大值开根号小于五位数
//=========筛法得到素数表
int prime[Maxn],pnum; //素数表和素数个数
bool p[Maxn] = {0}; //是否为素数,false为素数
void FindPrime() //筛法得出素数表
{
for(int i = 2;i<Maxn;i++)
{
if(p[i] == false)
{
prime[pnum++] = i;
for(int j = i + i;j<Maxn;j+=i)
{
p[j] = true; //被筛掉的都不是素数
}
}
}
}
//========得到质因子
struct factor
{
int x,cnt; //x为质数,cnt为质数的数量
}f[10];
int num = 0; //因子的个数
void getfactor(int n) //得到该数的所有质因子
{
int sqt = (int)sqrt(n * 1.0);
for(int i = 0;i<pnum && prime[i] <= sqt;i++) //在根号n的范围内
{
if(n % prime[i] == 0)
{
f[num].x = prime[i]; //记录因子
f[num].cnt = 0;
while(n % prime[i] == 0) //计算因子的系数
{
f[num].cnt++;
n/=prime[i];
}
num++;
}
if(n == 1) //及时退出
break;
}
if(n!=1) //如果循环过后n还不等于1
{
f[num].x = n;
f[num++].cnt = 1;
}
}
int main()
{
freopen("1.txt","r",stdin);
FindPrime();
int n;
cin>>n;
if(n == 1)
cout<<"1=1";
else
{
cout<<n<<"=";
getfactor(n);
for(int i = 0;i<num;i++)
{
cout<<f[i].x;
if(f[i].cnt > 1)
cout<<"^"<<f[i].cnt;
if(i!=num - 1)
cout<<"*";
}
}
return 0;
}
求质因子模板and求素数筛法and1059题解
猜你喜欢
转载自blog.csdn.net/qq_15556537/article/details/104093646
今日推荐
周排行