【蓝桥杯VIP】试题 基础练习 分解质因数(Python解法+Java解法)
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=22
5=5
6=23
7=7
8=222
9=33
10=25
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
Python解法:
'''
python中频繁的print非常的浪费时间,极易超时!(在使用时应尽量在循环中少使用print(),可以使用列表或字符串暂时存储起来。且使用函数也可节约用时!):
在一次进行1W次循环运行实验中:
有"print"时的耗时:85.897000
没有"print"时的耗时:0.002000
同样1W次循环,相差了 85.897/0.002=42948.5倍。
'''
# 100分:cpu使用 625ms (用时少)
def find(n):
s=str(n)+"="
k=n
for i in range(2,n+1):
if k%i==0:
s+=str(i)
#print(n,"=",i,sep="",end='')
k//=i
while k>=2:
for j in range(2,k+1):
if k%j==0:
s+="*"+str(j)
#print("*",j,sep="",end='')
k//=j
break
return s
a,b=map(eval,input().split())
for n in range(a,b+1):
print(find(n))
# 100分:cpu使用 953ms (用时多,差点超时。时间限制:1.0s )
a,b=map(eval,input().split())
for n in range(a,b+1):
s=str(n)+"="
k=n
for i in range(2,n+1):
if k%i==0:
s+=str(i)
#print(n,"=",i,sep="",end='')
k//=i
while k>=2:
for j in range(2,k+1):
if k%j==0:
s+="*"+str(j)
#print("*",j,sep="",end='')
k//=j
break
print(s)
break
# 90分:超时
a,b=map(eval,input().split())
for n in range(a,b+1):
for i in range(2,n+1):
if n%i==0:
print(n,"=",i,sep="",end='')
k=n//i
while k>=2:
for j in range(2,k+1):
if k%j==0:
print("*",j,sep="",end='')
k//=j
break #每次循环找到一个可以整除的 j 时就需立即跳出该循环,重新执行循环,力求得到的 j 都是最小的 j
print()
break #每次循环找到一个可以整除的 i 时就需立即跳出该循环,重新执行循环,力求得到的 i 都是最小的 i
Java解法:
// 100分
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int a=scan.nextInt();
int b=scan.nextInt();
String str1;
int k;
for(int n=a;n<=b;n++){
k=n;
str1=k+"=";
for(int i=2;i<=k;i++){
if(k%i==0){
str1+=i;
k/=i;
while(k>=2){
for(int j=2;j<=k;j++){
if(k%j==0){
str1+="*"+j;
k/=j;
break;
}
}
}
System.out.println(str1);
break;
}
}
}
}
}