線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1086
推到 Plurk!
推到 Facebook!

質數

尚未結案
white-whale
一般會員


發表:5
回覆:5
積分:2
註冊:2004-10-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-24 20:26:15 IP:61.228.xxx.xxx 未訂閱
#include "stdafx.h"
#include 
#include 
#include <math.h>
using namespace std;    int _tmain(int argc, _TCHAR* argv[])
{
   int c;
   int x[24]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,57,61,67,71,73,79,83,87,89};
 while(1)
 {        
   cout <<  "輸入一數值\n";
   cin >> c;
   if (c<0)
   {
    break;  //若輸入ㄉ數為負數則跳出
   }
     for(int i=0;i<=24;i  )
     { 
      if (c%x[i]==0)
      {
       cout << "不是質數" << "\n";
      }
      else
      {
       cout << "是質數" <<"\n";
      }
     }        
 }
  system("PAUSE");         
  return 0;
}
○第一次執行時可以,可是後來稍微做些改變執行結果看不到,執行完後視窗會自己關掉不會停下來..即使我打ㄌ system("PAUSE") ○輸入某數判斷他是否為質數,直到輸入負數才跳出程式。故我用whiel(1)可以重複輸入
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-24 23:56:01 IP:211.76.xxx.xxx 未訂閱
white-whale 您好:    您的質數判斷只能是小於等於89。 依您的邏輯修改程式如下,請參考。    
int main(int argc, char* argv[])
{
   int c;
   int x[24]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,57,61,67,71,73,79,83,87,89};
   while(1)
   {        
     cout <<  "輸入一數值\n";
     cin >> c;
     if (c<0)
     {
      break;  //若輸入ㄉ數為負數則跳出
     }
     int found = 0;
     for(int i=0;i<=24;i  )
       { if (c==x[i])
           { cout << "是質數" <<"\n";
             found = 1;
             break;
           }      
       }
     if ( found==0 )
       {  cout << "不是質數\n";
       }              
   }
  system("PAUSE");         
  return 0;
}
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
white-whale
一般會員


發表:5
回覆:5
積分:2
註冊:2004-10-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-25 18:39:42 IP:218.167.xxx.xxx 未訂閱
但是我ㄉ本意是要輸入任意某數進去判斷,並非侷限範圍輸入... 可是我不知道怎麼去寫比較好,所以就用 X[] 這ㄍ方法,讓他一ㄍ一ㄍ除,如果這ㄍ數大於X[]範圍就不能執行ㄌ.....請問有什麼方法改進嗎?
pkdemon
初階會員


發表:2
回覆:51
積分:25
註冊:2004-09-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-26 09:39:31 IP:211.22.xxx.xxx 未訂閱
white-whale你好,    請參考http://delphi.ktop.com.tw/topic.php?topic_id=53591    另外要提的是,利用sqrt來求質數是一個方法,可是這也有牽扯到效率的問題畢竟一個很大的數即使開根號也是很大 這方面的話要利用數學方面的方法來輔助,小弟不才,數學很就沒有碰了.....請各位知道的大大來 > 另外改了一下你的程式,試試看吧 < class="code"> #include "stdafx.h" #include #include #include <math.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { bool ret; int c; int p; while(1) { cout << "輸入一數值\n"; cin >> c; if (c < 0) { break; //若輸入ㄉ數為負數則跳出 } p = sqrt(c); for( int i = 2 ; i <= p ; i ) { if (c%i == 0) { ret = true; break; } else { ret = false; } } if(ret) { cout << "是質數" <<"\n"; } else { cout << "不是質數" << "\n"; } } system("PAUSE"); return 0; } 發表人 - pkdemon 於 2004/10/26 10:04:56
white-whale
一般會員


發表:5
回覆:5
積分:2
註冊:2004-10-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-26 22:31:55 IP:61.228.xxx.xxx 未訂閱
◆第一次執行輸入數字時案ENTER顯示
     for(int i=0;i<=24;i++)
     { 
      if (c%x[i]==0)   ←←←←←←這行有問題
      {
       cout << "不是質數" << "\n";
      }
      else
      {
       cout << "是質數" <<"\n";
      }
     }
◆第二次執行如上圖
pkdemon
初階會員


發表:2
回覆:51
積分:25
註冊:2004-09-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-27 08:31:43 IP:211.22.xxx.xxx 未訂閱
◆第一次執行輸入數字時案ENTER顯示
     for(int i=0;i<=24;i  )   //你的陣列只有24個,i最多到23......
     { 
      if (c%x[i]==0)   ←←←←←←這行有問題
      {
       cout << "不是質數" << "\n";
      }
      else
      {
       cout << "是質數" <<"\n";
      }
     }
◆第二次執行如上圖 發表人 - pkdemon 於 2004/10/27 08:34:38
white-whale
一般會員


發表:5
回覆:5
積分:2
註冊:2004-10-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-27 23:27:05 IP:218.167.xxx.xxx 未訂閱
sorry~po錯程式ㄌ@@" 輸入一數按下Enter就會出現上圖
 for(int i=0;i<=p;i++)
        { 
             if (c % i==0)‧‧‧中斷位置
             {
               ret = true;
             }
             else
             {
               ret = false;
             }
        }
pkdemon
初階會員


發表:2
回覆:51
積分:25
註冊:2004-09-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-28 08:30:47 IP:211.22.xxx.xxx 未訂閱
引言: sorry~po錯程式ㄌ@@" 輸入一數按下Enter就會出現上圖
 for(int i=0;i<=p;i++)   //應該是i = 2
        { 
             if (c % i==0)‧‧‧中斷位置
             {
               ret = true;
             }
             else
             {
               ret = false;
             }
        }
訊息很明顯的說出了Integer division by zero,分母不能為0啊
white-whale
一般會員


發表:5
回覆:5
積分:2
註冊:2004-10-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-28 22:56:05 IP:61.228.xxx.xxx 未訂閱
int _tmain(int argc, _TCHAR* argv[])
{
        bool ret;
        int c;
        int p;            while(1)
        {        
                cout <<  "輸入一數值\n";
                cin >> c;
                if (c < 0)
                {
                        break;  //若輸入ㄉ數為負數則跳出
                }                    p = sqrt(c); //sqrt是開根號為什麼要降設ㄋ                    for( int i = 2 ; i <= p ; i   ).....??
                { 
                        if (c%i == 0)...??
                        {
                                ret = true;
                                break;
                        }
                        else
                        {
                                ret = false;
                        }
                }
                if(ret) //這行不可以寫成if(ret==true)嗎?
                {
                                cout << "不是質數" <<"\n";
                }
                else
                {
                                cout << "是質數" << "\n";
                }
        }
        system("PAUSE");         
        return 0;
}
 
請你解釋一下..謝謝~ 若輸入16,那p=4,迴圈為什麼要用i~p→2~4,而且若C=10,p就會是3.xxx,可是P是宣告int整數值ㄝ,降不是就不符合ㄌ嗎。 用sqrt是不是只要讓他判斷一次就好,用雙回圈就判斷2次...是這樣嗎@@"
pkdemon
初階會員


發表:2
回覆:51
積分:25
註冊:2004-09-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-10-29 00:01:59 IP:220.137.xxx.xxx 未訂閱
引言:
int _tmain(int argc, _TCHAR* argv[])
{
        bool ret;
        int c;
        int p;            while(1)
        {        
                cout <<  "輸入一數值\n";
                cin >> c;
                if (c < 0)
                {
                        break;  //若輸入ㄉ數為負數則跳出
                }                    p = sqrt(c); //sqrt是開根號為什麼要降設ㄋ                    for( int i = 2 ; i <= p ; i   ).....??
                { 
                        if (c%i == 0)...??
                        {
                                ret = true;
                                break;
                        }
                        else
                        {
                                ret = false;
                        }
                }
                if(ret) //這行不可以寫成if(ret==true)嗎?可以只是懶^^a
                {
                                cout << "不是質數" <<"\n";
                }
                else
                {
                                cout << "是質數" << "\n";
                }
        }
        system("PAUSE");         
        return 0;
}
 
請你解釋一下..謝謝~ 若輸入16,那p=4,迴圈為什麼要用i~p→2~4,而且若C=10,p就會是3.xxx,可是P是宣告int整數值ㄝ,降不是就不符合ㄌ嗎。 用sqrt是不是只要讓他判斷一次就好,用雙回圈就判斷2次...是這樣嗎@@"
剩下的算是數學問題,我這邊用來判斷一個數是不是質數的方法,是利用一個數N的平方根以下所有的整數都無法整除N(1除外),則N為質數 P宣告為整數是因為取平方根的時候只要整數部分(其實用float也是可以^^a) 了解判斷質數的方法,就可以知道程式為什麼長這樣了,方法並不唯一,這只是其中一個方法^^
shpeng
初階會員


發表:6
回覆:67
積分:49
註冊:2002-12-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-10-29 11:06:48 IP:220.130.xxx.xxx 未訂閱
請問一個問題 質數 除了可以拿來考試,練程式功力外,還有什麼用途? ==取之於斯,用之於斯==
------
==取之於斯,用之於斯==
bdedownload
一般會員


發表:7
回覆:10
積分:3
註冊:2003-05-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-10-29 11:17:34 IP:140.127.xxx.xxx 未訂閱
加解密. 賺錢:http://www.rsasecurity.com/rsalabs/node.asp?id=2091
white-whale
一般會員


發表:5
回覆:5
積分:2
註冊:2004-10-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-10-29 20:28:36 IP:61.228.xxx.xxx 未訂閱
<>>
系統時間:2024-06-28 1:56:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!