您的位置:首页 > 其它

ZOJ-2723

2014-03-17 20:25 423 查看
素数分解,也是代码拷过来改几下就完事了,有现成代码就是爽

#include<stdio.h>
#include<string.h>
#include<math.h>

int is_prime(int* primes, int num)
{
int i, n = (int) sqrt(num);
for (i = 0; primes[i] != -1 && primes[i] <= n; i++)
if (num % primes[i] == 0)
return 0;
return 1;
}

int is_in_prime_array(int* primes, int len, int num)
{
int low = 0, high = len - 1, center = (low + high) / 2;
while (primes[center] != num)
{
if (low >= high)
return 0;
if (primes[center] < num)
low = center + 1;
else
high = center - 1;
center = (low + high) / 2;
}
return 1;
}

int main()
{
int n, i, primes[80000], index = 0;
memset(primes, -1, 80000 * sizeof(int));
primes[index++] = 2;
for (i = 3; i < 1000000; i += 2)
if (is_prime(primes, i))
primes[index++] = i;

while (scanf("%d", &n) != EOF)
{
int flag = 0, upbound = (int) sqrt(n);
for (i = 0; primes[i] <= upbound; i++)
if (n % primes[i] == 0
&& is_in_prime_array(primes, index, n / primes[i]))
{
flag = 1;
break;
}
printf(flag ? "Yes\n" : "No\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: