模數正在改變 的值,primer因為當我在找到模數之前列印它時,我得到了它的實際值,但在找到模數后,它有時會變為 0 或 1。這是一個確定用戶輸入的數字是否為質數的程式。
#include<stdio.h>
int main(){
int num;
int primer;
int mod;
printf("enter num> ");
scanf("%d", &num);
primer = num-1;
while(primer > 0){
mod = num%primer;
if(mod == 0){
printf("not prime");
break;}
if(primer == 1){
printf("prime");
break;}
primer--;}
}
uj5u.com熱心網友回復:
謹防將問題歸咎于語言結構(尤其是定義明確的數學結構)。
問題是你的代碼。它不會做你認為它會做的事情。您正在嘗試使用兩種相互競爭的方法來完成您的任務。重來。當您遍歷可能的除數時,從 2 開始計數。您的變數名稱選擇也無濟于事。
請記住,計算機不會幫助您解決此任務。作為程式員,你的作業是首先自己解決任務,然后告訴計算機如何去做。
uj5u.com熱心網友回復:
代碼以素數失敗,primer == 1然后mod == 0為真 - 導致“非素數”。
mod = num%primer;
if (mod == 0) {
printf("not prime");
break;
}
// Too late
if (primer == 1) {
printf("prime");
break;
}
代碼效率低下,因為它進行 O(num) 次測驗。
替代方案,使用奇數除數進行測驗:[3 ... num] 的平方根- 即 divisor*divisor <= num。
divisor*divisor <= num改革divisor <= num/divisor以避免溢位。
int isprime(int num) {
if (num % 2 == 0) {
return num == 2; // Only even prime
}
for (int divisor = 3; divisor <= num/divisor; divisor = 2) {
if (num%divisor == 0) {
return 0;
}
}
// Reach this point when num is a prime or an odd less than 3
return num >= 3;
}
uj5u.com熱心網友回復:
問題根本不在于模數,似乎當primer達到一個時,結果為num%primer0,因此滿足 if 陳述句的兩個條件,看看如何mod == 0和primer == 1都是true,一個簡單的if(mod == 0 && primer != 1)修復它。至于底漆有時是 1 和 0,這也是我愚蠢的典型案例,我在if陳述句中檢查它的值,因此該值是回圈減少后的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/354220.html
