云上day-08

文章介绍了如何通过编程解决一个计算问题,给定一个正整数,找到其由两个不同质数相乘得到的较大质数。提供了C、C++和Java三种语言的从前往后遍历质因数的解题思路和代码示例。
摘要由CSDN通过智能技术生成

题目描述

已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数。

题目链接:B2084 质因数分解 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

输入格式

输入只有一行,包含一个正整数 n(6 < n < 10^{9})。

输出格式

输出只有一行,包含一个正整数 p,即较大的那个质数。

解题思路

由于数 n 是由两个不同质因数的乘积构成的,因此我们如果知道较小的那一个质因数的话,自然而然较大的那一个质因数也知道。然而,较小的那个质因数不可能超过数 n 的算数平方根,因此可以从前往后循环遍历较小的那一个质因数,再输出较大的那个质因数,也可以直接从后往前遍历较大的那个质因数

解题代码

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);
            }
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值