已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数。
输入格式
输入一个正整数 n。
输出格式
输出一个正整数 p,即较大的那个质数。
--------------------------------
第一次做的时候
乍一看,这不是很简单嘛,判断n不是素数,然后循环,从2到n-1,是否只有两个约数且为素数,
写了个很长的代码
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int sushu(int x)
{
int i, flag = 0;
if (x == 1)return 0;
for (i = 2; i <= sqrt(x); i++) {
if (x % i == 0) {
flag++;
break;
}
}
if (flag == 0)
return 1;
else
return 0;
}
int main()
{
int n = 0;
int i = 0;
int a = 0;
int b[10];
int c = 0;
scanf("%d", &n);
if (!sushu(n))
{
for (i = 2; i < n; i++)
{
int s = sushu(i);
if (n % i == 0 && s == 1)
{
b[a] = i;
a++;
}
if (a == 3)
{
exit(0);
}
}
if (a == 2)
{
c = b[0] > b[1] ? b[0] : b[1];
//这里写成c=b[1],运行时间反而多了10ms,不知道为什么。
printf("%d", c);
}
}
return 0;
}
结果是TLE
然后再看一遍题目才反应过来,已知正整数 n 是两个不同的质数的乘积!!!!
第二次做的时候
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int a = 0;
int c = 0;
scanf("%d", &n);
for (i = 2; i < n; i++)
{
if (n % i == 0)
{
a++;
}
if (a == 2)
{
c = i;
printf("%d", c);
break;
}
}
return 0;
}
然后又是TLE!!!!!
原来当n太大的时候就超时了,怎么办呢?
第三次
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int a = 0;
int c = 0;
scanf("%d", &n);
for (i = 2; i < n; i++)
{
if (n % i == 0)
{
a++;
}
if (a == 1)
{
c = n / i;//没错就是这一步
printf("%d", c);
break;
}
}
return 0;
}
这次终于是全AC了