Luogu P1075 质因数分解题解

一道很简单的数论题:

先上题面

题目描述

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

输入格式

一个正整数nn。

输出格式

一个正整数pp,即较大的那个质数。

输入输出样例

输入 1
21

输出 1

7
解析:
仔细读题后,我们能够发现
1.正整数是两素数的乘积,那么我们就直接循环找那个最大的素因数即可
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int sum;
scanf("%d",&sum);
for(int i=sum-1;i>=1;i--)
if(sum%i==0)
{
printf("%d",i);break;
}
return 0;
}

然而



发现有四个点TLE了,
于是发现了第二点。
2.
正整数 sum= a*b (a是较小素数,b是较大素数)
如果循环找b的话,循环次数应该是sum-b,即sum-sum/a,
但是a最小可能是2,所以逆向循环最少循环sum/2次。
而正向循环,最少只要2次。

  #include <bits/stdc++.h>
  using namespace std;
  int main()
  {
       int sum;
       scanf("%d",&sum);
       for(int i=2;i<sum;i++)
       if(sum%i==0) {printf("%d",sum/i);break;}
       return 0;
  }

 

猜你喜欢

转载自www.cnblogs.com/majorin/p/11747181.html