测试地址:☞
【题目描述】
原题来自:NOIP 2012 普及组
已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数。
【输入】
输入只有一行,包含一个正整数 n。
【输出】
输出只有一行,包含一个正整数 p,即较大的那个质数。
【输入样例】
21【输出样例】
7【提示】
数据范围与提示:
对于 30% 的数据,n ≤ 1000;
对于全部数据,6 ≤ n ≤ 2×10^9 。
【思路】
该题已明确表明 n 为两个不同质数的乘积,故不用再去判断其因子是否为质数。
找到这个数最小的因数,再用这个数除以这个最小的因数即可(即得到较大的那个因数)
这么做有两个省力之处:
1.不用挨个分解质因数
2.不用判断素数
【AC代码】
#include<cstdio> #include<cmath> int main(){ int n; scanf("%d", &n); for(int i = 2; i <= sqrt(n); i++){ if(n%i == 0){ printf("%d", n/i); break; } } return 0; }