2015-09-24 27 views
-1

此代碼是否正確使用函數檢查素數。我沒有收到任何語法錯誤,但無論我輸入什麼內容,它總是顯示首字母。此代碼是否正確使用函數檢查c中的素數?

#include<stdio.h> 
int prime(int); 

void main() { 
    int n, count, a; 

    printf("enter the number\n"); 
    scanf("%d", &n); 
    prime(n); 

    if (count == 2) 
     printf("prime"); 
    else 
     printf("not prime"); 
} 

int prime(int n) { 
    int i, count = 0; 
    for (i = 1; i <= n; i++) { 
     if (n % i == 0) { 
      count++; 
     } 
     return (count); 
    } 
} 
+1

如果你看的結果可能有幫助'黃金()' – Buddy

+0

你的輸出取決於其上未初始化count'的'的價值,所以**未定義行爲**。明天,*沒有任何*你輸入將是質數。如果你不介意我說,你的'素數'函數是天真的,因爲(一方面)任何大於'n'的平方根的除數將已經通過其另一個除數檢查。 –

回答

1

修改你的函數prime -

int prime(int n) { 
int i, count = 0; 
for (i = 1; i <n; i++) {  // go till n (or better till sqrt of n) 
    if (n % i == 0) { 
     count++; 
    } 
    if(count==2){    // if count is 2 get out of loop 
      break; 
     } 
    } 
    return count;  // return out of loop 
} 

在你的功能main -

void main- >int main(void)

2.寫你if else satatements如下 -

if (count == 2) 
    printf("not prime"); 
else 
    printf("prime"); 

main初始化count0。 通話功能爲 -

  count=prime(n); 
+1

@WeatherVane沒問題先生! :) – ameyCU

0

您的主要功能無法正常工作。在第一個for循環,你正在做n & 1 == 0總是爲真,並在最後一個循環n % n == 0也始終是真實的

int prime(int n){ 
    int i; 
    int isPrime = 1; 
    for(i=2;i<sqrt(n) && isPrime;i++){ // do the loop while 2<i<sqrt(n) and n isPrime, once you know it's not prime don't loop anymore 
     isPrime = n%i; // If it's 0 then it's not prime (isPrime = 0) else it's true   
    } 
    return isPrime; 
} 

編輯:優化的for循環,直到I =開方(N)

0
/* i just needed to take input of value count and store it in a variable*/ 
#include<stdio.h> 
int prime(int); 
int main(void) 
{ 
    int n,count,a,m; 

    printf("enter the number\n"); 
    scanf("%d",&n); 
    m=prime(n); 

    if(m>2) 
     printf("not prime"); 
    else 
     printf("prime"); 
} 
int prime(int n) 
    { 
    int i,count=0; 
    for(i=1;i<=n;i++) 
    { 
     if(n%i==0) 
     { 
      count++; 
     } 

    } 
    return(count); 
    } 
0

一個簡單函數返回true如果數字是素數,並且如果不是,則返回false

int prime(int n){ 
    int i; 
    for(i= 2; i < n; i++){ 
    if(n % i ==0 && i != n) 
     return true; 
    } 
    return false; 
} 
相關問題