2019年1月26日
10:25
分解素因子
1.素数打表1e6
2.循环
考虑1的输出
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
typedef long long LL;
const int maxn = 1e6 +5;
vector<LL> prime;
vector<bool> check;
void init()
{
for(int i = 0; i < maxn; i++)
check.push_back(true);
prime.push_back(0);
for(int i = 2; i <= maxn; i++)
{
if(check[i])
{
prime.push_back(i);
prime[0]++;
}
for(int j = 1; j <= prime[0] && i * prime[j] < maxn; j++)
{
check[i * prime[j]] = false;
if(i % prime[j] == 0)
break;
}
}
}
void f(LL n)
{
LL s = n;
char p = '=';
cout << s ;
for(int i = 1; i <= prime[0] && prime[i] <= s; i++)
{
if(s % prime[i] == 0)
{
cout << p;
cout << prime[i];
int j = 0;
while(s % prime[i] == 0)
{
s = s / prime[i];
j++;
}
if(j != 1)
{
cout << "^" << j;
}
p = '*';
//cout << "*";
}
}
if(s > 1)
{
cout << p;
cout << s;
}
cout << endl;
//if()
}
int main()
{
init();
/*for(int i = 0 ; i < 10; i++)
cout << prime[i] << endl;*/
LL n;
while(cin >> n)
{
if(n <= 1)
{
cout << n << "=" << n << endl;
}
else
{
f(n);
}
}
return 0;
}