题目描述
已知正整数n是两个不同的质数的乘积,试求出较大的那个质数。
输入描述:
输入只有一行,包含一个正整数n。
输出描述:
输出只有一行,包含一个正整数p,即较大的那个质数。
#include<iostream> #include<math.h> using namespace std; int main() { long long n; cin>>n; long long i,j,k,x; int flag1 = 0,flag2 = 0; for(i=2;i<=sqrt(n);i++) { flag1 = 0; flag2 = 0; if(n%i != 0) continue; for(j=2;j<=sqrt(i);j++) { if(i%j==0) { flag1 = 1; break; } } x = n/i; for(k=2;k<=sqrt(x);k++) { if(x%k==0) { flag2 = 1; break; } } if(flag1==0&&flag2==0) { cout<<x; break; } } }
include<iostream> #include<cmath> using namespace std; const int MAXN=1000; long long n; int main(){ cin>>n; if(n%2==0) cout<<n/2; else{ for(long long i=3;i<=n;i+=2) if(n%i==0){ cout<<n/i; break; } } return 0; }
总结
- 一开始的想法从小到大找到每一个质数,然后判断是否可以AC,这样可以输入不能分为两个质数的数据
- 后来发现题目限制了输入的数必为两个质数之积,又因为质数不能分解的特点,所以输入的数据必定只能被这两个数所整除,所以直接找到最小的可以整除的数,另一个就是最大的了