Python基础练习 分解质因数

470 阅读1分钟

Python基础练习 矩阵乘法

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

思路:从区间前端开始一次遍历,在每次遍历时,需要2开始判断,是否为该数的质因数,并设置一个数累加,
在循环中判断是否为质数,是否为因数,值得注意的是最后几个判断的条件应当小心。

问题描述

求出区间[a,b]中所有整数的质因数分解。

补充:质因数就是指一个正整数的约数,并且该数还属于是质数的数字,质因数有时候也被我们叫做“素因数”和“质因子”,举例子来说,在2×2×2=8这个等式当中,数字2是数字8的约数,且2还属于质数,就称2是8的质因数。如果两个为正数的正整数,在除开数字1之外,就没有了其他任何相同的质因数,我们就可以说这两个正整数互质。

输入输出

  • 输入格式

  输入两个整数a,b。

  • 输出格式

  每行输出一个数的分解,形如k=a1a2a3…(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

   15 22

  • 提示

  先筛出所有素数,然后再分解。

  • 数据规模和约定

  2<=a<=b<=10000

Python版本 代码如下

本题不支持numpy库,注意。详细解法如下:

a, b = map(int, input().split())
for e in range(a, b+1):
    num = e
    m=[]
    while e!=1:
        for i in range(2, e+1):
            if e%i==0:
                m.append(str(i))
                e=e//i
                break
    print("{}=".format(num), end="")
    print("*".join(m))

C++版本 代码如下

#include <iostream>
#include <vector>

using namespace std;
 
// 判断是否是质数
bool IsPrime(int n)
{
	int i;
	for (i = 2; i <= n/2; ++i){
		if (n%i == 0){
			return false;
		}
	}
	if (i > n/2){
		return true;
	}else{
		return false;
	}
}
 
int main()
{
	vector<int> v;
	int a,b;  
	cin >> a;
	cin >> b;
	for (int i = 2; i<=b; ++i){
		if (IsPrime(i)){
			v.push_back(i);
		}
	}
 
	for ( int i = a; i <= b; ++i){
		if (IsPrime(i)){
			cout << i << "=" << i;
		}
		else{
			cout << i << "=";
			int temp = i;
			int index = 0; 
			while (temp != 1){
				if (temp%v[index] == 0){
					cout << v[index];  
					temp /= v[index];     
					index = 0;
					if (temp != 1)
						cout << "*";
				}else{
					index++;
				}
			}
		}cout << endl;
	}
        return 0;
}

学习参考文章:
C++版本博客参考1
C++版本博客参考2