题目链接: http://lx.lanqiao.cn/problem.page?gpid=T57
时间限制: 1Sec 内存限制: 128MB
题目描述
求出区间[a,b]中所有整数的质因数分解。
输入
输入两个整数a,b。
输出
每行输出一个数的分解,形如k=a1*a2*a3...(a1< =a2< =a3...,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
解题思路
先用筛法打个表,然后判断分解。
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10000;
int vis[MAXN + 5], isprime[MAXN];
void is_prime() {//线性筛法打表
int cnt = 0;
memset(vis, 0, sizeof(vis));
for (int i = 2; i <= MAXN; i++) {
if (!vis[i])
isprime[cnt++] = i;
for (int j = 0; j < cnt && i * isprime[j] <= MAXN; j++) {
vis[i * isprime[j]] = 1;
if (!(i % isprime[j]))
break;
}
}
}
int main() {
is_prime();
int a, b, n;
scanf("%d%d", &a, &b);
for (int i = a; n = i, i <= b; i++) {
printf("%d=", i);
int temp = 0, j = 0;
while (isprime[j] <= n) {
if (!(n % isprime[j])) {
if (temp)
printf("*%d", isprime[j]);
else {
temp = 1;
printf("%d", isprime[j]);
}
n /= isprime[j];
}
else j++;
}
printf("\n");
}
return 0;
}