标签:方法 输出 不同的 center std 优化 string 缩小 names
已知正整数nn是两个不同的质数的乘积,试求出较大的那个质数。
输入只有一行,包含一个正整数 nn。
对于60%的数据,6≤n≤10006≤n≤1000。
对于100%的数据,6≤n≤2×1096≤n≤2×109。
输出只有一行,包含一个正整数 pp,即较大的那个质数。
源代码
#include<iostream> #include<math.h> using namespace std; int main() { int n,s; cin>>n; for(int i=2;i<=sqrt(n);i++) { if(n%i==0) { s=n/i; cout<<s<<endl; break; } } return 0; }
这道题中用sqrt(n)来缩小i的筛选范围,i为较小质因数,相对的,必然有一个较大的数与其相乘得到n,即为s,用s=n/i来表示。
若不用sqrt开放,会导致运算超时
改前代码
#include<iostream>
using namespace std;
int main()
{ int n;
cin>>n;
for(int i=n-1;i>=2;i--)
{ if(n%i==0)
{
cout<<i<<endl;
break;
}
}
return 0;
}
改动前只有60分,因为前6组数据均可,但后四组数据均运算超时。
所以在一定情况下,可以采用sqrt开平方等方法优化代码,减小复杂度,加快运算速度。
类似的通过分部或分情况的优化方式在插入排序中也有体现。
一本通题库 第一部分 C++语言 --> 第四章 循环结构的程序设计 1098:质因数分解
标签:方法 输出 不同的 center std 优化 string 缩小 names
原文地址:https://www.cnblogs.com/jd1412/p/12241789.html