【发布时间】:2011-07-13 23:58:01
【问题描述】:
【问题讨论】:
-
我已将其标记为重复。
-
@Sanjeevakumar Hiremath,“重复 1”用于 Haskell 代码;尝试将其翻译成 C 会很烦人。:)
-
@Sanjeevakumar:至少寻找使用相同语言的问题。
标签: c
【问题讨论】:
标签: c
最简单的方法是写一个循环,比如:
int is_prime(int num)
{
if (num <= 1) return 0;
if (num % 2 == 0 && num > 2) return 0;
for(int i = 3; i < num / 2; i+= 2)
{
if (num % i == 0)
return 0;
}
return 1;
}
然后你可以优化它,迭代到floor(sqrt(num))。
【讨论】:
num % 2,然后从 3 开始 i 并以 2 递增,因为您已经消除了所有偶数。
is_composite(n) 如果应该为 1 提供正确答案,则不应将其实现为 !is_prime(n),因为 1 也不是复合的。
最快的方法是预先计算你感兴趣的范围内所有可能的整数的位数组(表示素数/非素数)。对于 32 位无符号整数,只有 512M,这将很容易适应现代地址空间(即使不适合,也将是快速的文件查找)。
这几乎肯定会比每次通过筛子计算要快。
【讨论】:
【讨论】: