#6148: 一直逾時 不知道問題在哪裡>"<


silentwait (燒燒)

學校 : 國立中央大學
編號 : 10486
來源 : [140.115.227.87]
最後登入時間 :
2014-09-16 11:28:22
a007. 判斷質數 | From: [140.115.227.87] | 發表日期 : 2011-12-08 22:34

以下是程式碼 
 
#include<iostream>
#include<cmath>
using namespace std;

int main()
{
    int number,des=1,bb=0;
    cin >> number;
    while( number >= 2 && number <= 2147483647 ){  
        bb = sqrt((double)number);
        for(int i=2; i<=bb; i++){
            if( (number%i) == 0){
                des = 0;
                break;
            }
            else
                des = 1;
        }
        if(des == 0)
            cout << "非質數" << endl;
        else
            cout << "質數" << endl; 
    cin >> number;
    }
    return 0;    
 
 
試了很久還是超過時間不知道問題在哪裡
 
謝謝好心人士幫忙解答>"< 
 
#6149: Re:一直逾時 不知道問題在哪裡>


yihshyng223 (Mac)

學校 : 國立臺中第一高級中學
編號 : 20752
來源 : [140.114.221.118]
最後登入時間 :
2015-03-08 15:43:15
a007. 判斷質數 | From: [113.61.202.247] | 發表日期 : 2011-12-10 15:19

以下是程式碼 
 
#include
#include
using namespace std;

int main()
{
    int number,des=1,bb=0;
    cin >> number;
    while( number >= 2 && number <= 2147483647 ){  
        bb = sqrt((double)number);
        for(int i=2; i<=bb; i++){
            if( (number%i) == 0){
                des = 0;
                break;
            }
            else
                des = 1;
        }
        if(des == 0)
            cout << "非質數" << endl;
        else
            cout << "質數" << endl; 
    cin >> number;
    }
    return 0;    
 
 
試了很久還是超過時間不知道問題在哪裡
 
謝謝好心人士幫忙解答>"< 
 
你sqrt那邊不用轉成double呀,反正bb都是int了,而且其實也不用宣告des,可以用continue之類的技巧來判斷,像這樣:
(int j,input;) 
j=sqrt(input); 
      for(int m=2;m<=j;m++){
          if(input%m!=0){continue;}
          else{cout<<"非質數\n";goto held;}
                                    
      }
       cout<<"質數\n";
       held:m=0;        
...這當然不是全部啦,但你應該知道意思 

 
ZeroJudge Forum