问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
int num[10000005];
int a[10000005];
int t = 0;
int sh()
{
memset(a, 1, sizeof(a));
a[0] = a[1] = 0;
for (int i = 2; i <= 10000001; i++)
{
if (a[i])
{
num[t] = i;
t++;
}
for (int j = 0; j <= t && num[j] * i <= 10000001; j++)
{
a[num[j] * i] = 0;
if (i % num[j] == 0)
break;
}
}
}
int su(ll n)
{
int mark = 0;
for (int i = 0; num[i] <= sqrt(n * 1.0); i++)
{
if (n % num[i] == 0)
{
mark = 1;
break;
}
}
if (n == 1)
mark = 1;
return mark;
}
int main()
{
sh();
ll n, m;
cin >> n >> m;
for (ll i = n; i <= m; i++)
{
if (su(i) == 0)
cout << i << "=" << i << endl;
else
{
ll l=i;
cout << l << "=";
ll res[1000], j = 0;
for (ll k = 2; k <= l; k++)
{
if (su(k) == 1)
continue;
else
{
while (l % k == 0)
{
res[j] = k;
j++;
l = l / k;
}
}
}
for (ll k = 0; k < j - 1; k++)
cout << res[k] << "*";
cout << res[j - 1] << endl;
}
}
return 0;
}