我有这段代码正在计算输入数字下方的素数数量:
#include<stdio.h>
#include<Math.h>
int is_prime(long num)
{
int k = 1, a = 0, b = 0;
long sr;
switch(num)
{
case 1: return 0;
case 2: return 1;
case 3: return 1;
case 4: return 0;
case 5: return 1;
case 6: return 0;
case 7: return 1;
}
if (num % 2 == 0) return 0;
if (num % 3 == 0) return 0;
sr = (int) sqrt(num);
while (b < sr) {
a = (6 * k) - 1;
b = (6 * k) + 1;
if (num % a == 0)
return 0;
if (num % b == 0)
return 0;
k += 1;
}
return 1;
}
void main()
{
int j;
long num=0;
printf("insert your number to check for prime numbers\n");
scanf("%ld",&num);
for (j = 0; j<num; j++){
if (is_prime(j))
printf("%d is a prime\n", j);
}
}
挑战的一部分——有人问我是否可以通过多核处理来加速我的计算,我回答是的。例如,如果我想检查 100 以下的素数,我将使用线程一来计算 2-50,使用线程二来计算 51-99。
他说我得考虑一下,因为在第一个核心上运行 2-50 和在第二个核心上运行 51-99 对于 x 等于 100 存在基本错误。
有人知道他是否正确吗?如果是这样,多核架构的正确方法是什么?