质因数分解

xiaoxiao2021-02-28  17

题目:质因数分解

题目来源: 2012年NOIP全国联赛普及组

CodeVS题号: 1313

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

输入描述 Input Description

输入只有一行,包含一个正整数 n。

输出描述 Output Description

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

样例输入 Sample Input

21

样例输出 Sample Output

7

数据范围及提示 Data Size & Hint

【数据范围】 对于60%的数据,6≤n≤1000。 对于100%的数据,6≤n≤2*109。

题解: 题目要我们求的,是某个数的最大质因数,首先,要求的数要先满足两个条件(1) 它要是个质数 (2)它要能被题目所给数整除 好了 一般思路,从小到大循环求这个数(从小到大查找可以极大减小运行次数),看看能不能把题目所给的数整除,而且还要是个质数,是就输出,解决;

代码如下:

#include<iostream> #include<cmath> #include<cstdio> using namespace std; int pd(int i)//判断是否为质数 { for(int j=2;j<=sqrt(i);j++) { if(i%j==0) return 0; } return 1; } long long int n,ans,q; int main() { cin>>n; for(int i=n-1;i>=2;--i)//从大到小循环 找到就退出 { if(n%i==0) { if(pd(i)==1) { ans=i; break; } } } printf("%lld",ans); return 0; }

ps:但问题真的那么简单吗,仔细思考,我们会发现,题目已经保障了数据一定是两个质数想乘而得到的,这意味着除了1和它本身,它只能被其他两个质数整除,所以,还判断什么质数啊,找到可以整除的最大数,直接输出吧,骚年。 (注意从小到大进行查找),因为这从小到大,除以小的就可以得到大的:

代码:

#include<iostream> #include<cmath> #include<cstdio> using namespace std; long long int n,ans,q; int main() { cin>>n; for(int i=1;i<=n;++i)//从小到大循环 找到就退出 { if(n%i==0) { ans=n/i; break; } } printf("%lld",ans); return 0; }
转载请注明原文地址: https://www.6miu.com/read-1750005.html

最新回复(0)