Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
6个月前关闭。
有人告诉我用C编写一个程序,以查找数字是否为质数并将其分解。我使用了重复除法,即我用从1到该数字的整数重复地除以该数字,如果余数为0且不超过2种情况(1和该数字),则该数字为质数,否则为质数。但是我的老师说,如果有很多输入,程序将花费很多时间来处理它,所以这是错误的。他说要创建一个新程序,但是如果不使用这种方法,我不明白如何检查数字是否为质数,所以请有人帮助我。
这会很烦人,所以让我们切换到质数数组,也许像这样:
当然,如果只有一个因素,那么您知道数字是质数,所以我们添加一下:
现在,该数组也将变得很烦人,尤其是对于大数(谁想手工写出一个大的素数数组?)。根据需要生成素数列表会更好。
为此,您需要“ Sieve_of_Eratosthenes”。有关说明,请参见:https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
6个月前关闭。
有人告诉我用C编写一个程序,以查找数字是否为质数并将其分解。我使用了重复除法,即我用从1到该数字的整数重复地除以该数字,如果余数为0且不超过2种情况(1和该数字),则该数字为质数,否则为质数。但是我的老师说,如果有很多输入,程序将花费很多时间来处理它,所以这是错误的。他说要创建一个新程序,但是如果不使用这种方法,我不明白如何检查数字是否为质数,所以请有人帮助我。
最佳答案
有人告诉我用C编写一个程序,以查找数字是否为质数并将其分解。
开始;忘记“是否是主要的”部分,而专注于“分解”。
分解数字首先尝试除以最小的质数,然后再除以最小的质数,然后...像这样:
while(value % 2 == 0) {
printf("2 ");
value /= 2;
if(value == 0) {
goto done;
}
}
while(value % 3 == 0) {
printf("3 ");
value /= 3;
if(value == 0) {
goto done;
}
}
while(value % 5 == 0) {
printf("5 ");
value /= 5;
if(value == 0) {
goto done;
}
}
这会很烦人,所以让我们切换到质数数组,也许像这样:
unsigned int array[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23 };
for(index = 0; index < sizeof(array) / sizeof(array[0]); index++) {
while(value % array[index] == 0) {
printf("%u ", array[index]);
value /= array[index];
if(value == 0) {
goto done;
}
}
}
done: ;
当然,如果只有一个因素,那么您知道数字是质数,所以我们添加一下:
unsigned int array[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23 };
int factorCount = 0;
for(index = 0; index < sizeof(array) / sizeof(array[0]); index++) {
while(value % array[index] == 0) {
printf("%u ", array[index]);
value /= array[index];
factorCount++;
if(value == 0) {
goto done;
}
}
}
done:
if(factorCount == 1) {
printf("Yep, that's a prime number\n");
}
现在,该数组也将变得很烦人,尤其是对于大数(谁想手工写出一个大的素数数组?)。根据需要生成素数列表会更好。
为此,您需要“ Sieve_of_Eratosthenes”。有关说明,请参见:https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
关于c - 如何不经除法反复查找数字是否为质数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57438645/
10-14 14:48