一、题目
1.最小和数
2.整数质因数分解
二、解答
1.最小和数
截图:
代码:
/***********************
* 1.最小和数
* 在最大公因数n1和最小公倍数n2之间,遍历最大公因数的倍数,判断是否满足条件
* 满足条件者(两数相乘等于其最小公倍数和最大公因数的乘积),便停止循环,输出结果
***********************/
#include<iostream>
using namespace std;
int main(){
int n1,n2,x,y; //n1,n2为最大公因数和最小公倍数
int min=50000;
cin>>n1>>n2;
x=n1;
while(1){
if(x>n2) break;
y=x;
while(y<=n2){
if(x*y==n1*n2&&(x+y)<min){
if(x==y&&n1!=n2){
y+=n1;
continue;
}
min=x+y;
}
y+=n1;
}
x+=n1;
}
cout<<min<<endl;
return 0;
}
2.整数质因数分解
截图:
代码:
/***********************
* 2.整数质因数分解
*
*
***********************/
#include <stdio.h>
int main(){
int n,i;
scanf("%d",&n);
for(i=2;i<=num;i++){ //从2开始循环,判断n是否能整出i,能整出,则n/=i且输出i,直至不能整除为止,不需要考虑什么素数
while(num%i==0){
printf("%d",i);
num=num/i;
if(num!=1)
printf("*");
}
}
}
三、回顾
1.最小和数
关键在于——两数相乘等于其最小公倍数和最大公因数的乘积,这个定理。
2.整数质因数分解
最开始做的时候太纠结于i是不是素数,总想着求解除一定范围内的素数集,再用n整除,实际上并无必要。无需判断i是否为素数。