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.分解质因数(水题)的主要内容,如果未能解决你的问题,请参考以下文章
poj3421 X-factor Chains——分解质因数