题目描述
已知正整数 是两个不同的质数的乘积,试求出较大的那个质数。
题目链接:B2084 质因数分解 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
输入格式
输入只有一行,包含一个正整数 (6 < < )。
输出格式
输出只有一行,包含一个正整数 ,即较大的那个质数。
解题思路
由于数 是由两个不同质因数的乘积构成的,因此我们如果知道较小的那一个质因数的话,自然而然较大的那一个质因数也知道。然而,较小的那个质因数不可能超过数 的算数平方根,因此可以从前往后循环遍历较小的那一个质因数,再输出较大的那个质因数,也可以直接从后往前遍历较大的那个质因数
解题代码
C代码:从前往后遍历
//头文件
#include<stdio.h>
#include<math.h>
//该题只需弄清n = p1 * p2(p1,p2均为质数,且必定较小数小于n的平方根)
//所以n的质因数为1, p1, p2, n
int main(){
//输入数据
int n;
scanf("%d",&n);
//从前往后遍历
for(int i = 2; i <= sqrt(n); i++){//终止条件只需到n的算术平方根
if(n % i == 0){//如果是较小的那个质因数
printf("%d",n/i);//输出较大的
break;
}
}
return 0;
}
C++代码:从后往前遍历:
//头文件
#include<iostream>
using namespace std;
int main()
{
//输入数据
int n;
cin>>n;
//从后往前遍历因子
for(int i=n-1;i>=2;i--){
if(n % i == 0){ //如果这个数是n的因子
cout<<i;
break;
}
}
return 0;
}
Java代码:从前往后遍历
//导包
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//输入数据
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
//循环
for (int i = 2; i < Math.sqrt(n); i++){
if(n % i == 0){
System.out.println(n/i);
}
}
}
}