信息学奥赛一本通——1410:最大质因子序列

文章介绍了如何使用C++编程语言解决最大质因子序列问题,通过判断质数和遍历的方式找出给定范围内的每个数的最大质因子,提供了一个详细的代码示例和解释。
摘要由CSDN通过智能技术生成

题目部分:

1410:最大质因子序列


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 22040     通过数: 15056

【题目描述】

任意输入两个正整数m,n(1<m<n≤5000),依次输出mm到nn之间每个数的最大质因子(包括m和n;如果某个数本身是质数,则输出这个数自身)。

【输入】

一行,包含两个正整数m和n,其间以单个空格间隔。

【输出】

一行,每个整数的最大质因子,以逗号间隔。

【输入样例】

5 10

【输出样例】

5,3,7,2,3,5

思路:

首先,我们要从小问题解决,我们先来思考一下,我们要怎么判断一个数n的最大质因子?

聪明的读者肯定会想到,我们先写一个函数,判断一个数是不是质数,然后我们从n遍历到2(最小的质因子是2)如果找到一个数能整除n,并且是质数,那就找到了最大质因子

代码是这样的:

int f(long long a){//判断是不是质数 
	if(a==1)return 0;
	for(int i=2;i<=sqrt(a);i++)
		if(a%i==0)
			return 0;
	return 1;
}
void pd(int a){//输出某个数的最大质因子 
    for(int i=a;i>=2;i--){//从a到2 
    	if(f(i)==1&&a%i==0){//是质数且能整除n 
    		cout<<i;return;//直接输出,果断结束 
		}
	}	
}

那你都会找一个数的最大质因子了,那找一堆书的最大质因子,应该很简单吧?

我们遍历a到b,输出a到b之间的每个数的最大质因子,如果i!=b那就输出逗号

具体来看代码

代码:

#include<bits/stdc++.h>
using namespace std;
int f(long long a){//判断是不是质数 
	if(a==1)return 0;
	for(int i=2;i<=sqrt(a);i++)
		if(a%i==0)
			return 0;
	return 1;
}
void pd(int a){//输出某个数的最大质因子 
    for(int i=a;i>=2;i--){//从a到2 
    	if(f(i)==1&&a%i==0){//是质数且能整除n 
    		cout<<i;return;//直接输出,果断结束 
		}
	}	
}
int main(){
    int a,b;
    cin>>a>>b;//读入 
    for(int i=a;i<=b;i++){//遍历a到b 
    	pd(i);//输出i的最大质因子 
    	if(i!=b){//如果i!=最大的b,说明我们现在找最大质因子的这个数,不是最后一个数 
    	//具体来说,我们找了a、a+1、a+2、……b,如果我们没有找到b,就可以输出逗号 
			cout<<",";
		}
	}
    return 0;
}

你有学会吗?

为什么我感觉会有人没听懂?

论怎么用chatGPT帮你写代码_ptyz306的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值