您的位置:首页 > 其它

SGU 113 Nearly prime numbers

2012-01-11 22:09 363 查看
SGU_113

对数分解素因子即可,如果最后素因子的个数为1或者大于2自然无解。

#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAXD 100010
#define D 100000
int isprime[MAXD];
int N;
void prepare()
{
long long int i, j;
memset(isprime, -1, sizeof(isprime));
for(i = 2; i < D; i ++)
if(isprime[i])
for(j = i * i; j < D; j += i)
isprime[j] = 0;
}
int check(int x)
{
int i, k, ok, num = 0;
while(x != 1 && num <= 2)
{
k = (int)sqrt(x + 1.0);
for(i = 2; i <= k; i ++)
if(isprime[i] && x % i == 0)
{
++ num;
x /= i;
break;
}
if(i == k + 1)
{
++ num;
x /= x;
}
}
if(num == 2)
return 1;
else
return 0;
}
int main()
{
int i, x;
prepare();
scanf("%d", &N);
for(i = 0; i < N; i ++)
{
scanf("%d", &x);
if(x < 2 || !check(x))
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: