SDNU 1427.分解质因数(水题)

Posted rootvount

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDNU 1427.分解质因数(水题)相关的知识,希望对你有一定的参考价值。

Description

问题描述   求出区间[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

Input

 

Output

 

Sample Input

 

Sample Output

 
思路:明明就是一道水题,debug却让我吐血!一开始我用vector来存数据,但是爆了,也不知道为什么会爆,我明明开了很大的数。后来只能用简化的办法了。
#include <cstdio>
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <map>
using namespace std;
#define ll long long
const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;

int a, b, tot, pri[10000+8], en[10000+8];
bool is[10000+8];

void E()

    tot = 0;
    memset(is, 1, sizeof(is));
    is[0] = is[1] = 0;
    for(int i = 2; i<10000+8; i++)
    
        if(is[i])
        
            pri[tot++] = i;
            for(int j = i+i; j<10000+8; j += i)
                is[j] = 0;
        
    


int main()

    E();
    while(~scanf("%d%d", &a, &b))
    
        for(int i = a; i <= b; i++)
        
            int id = 0, buffer = i;
            for(int j = 0; j < tot && pri[j]*pri[j] <= i; j++)
            
                if(buffer%pri[j] == 0)
                
                    while(buffer%pri[j] == 0)
                    
                        en[id++] = pri[j];
                        buffer /= pri[j];
                    
                
            
            if(buffer>1)en[id++] = buffer;
            printf("%d=", i);
            bool flag = 0;
            for(int j = 0; j<id; j++)
            
                if(flag)printf("*");
                flag = 1;
                printf("%d", en[j]);
            
            printf("\n");
        
    
    return 0;

 

以上是关于SDNU 1427.分解质因数(水题)的主要内容,如果未能解决你的问题,请参考以下文章

P1075 质因数分解

poj3421 X-factor Chains——分解质因数

HDU-1164-Eddy's research I (分解质因数)

分解质因数分解质因数是啥意思? 12分解质因数是??

分解质因数

质因数分解