题目链接: 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;
}