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