#9208: 【C++】執行逾時 (無sqrt)


editorer (editorer)

學校 : 不指定學校
編號 : 40419
來源 : [118.161.10.230]
最後登入時間 :
2014-12-27 10:05:23
a007. 判斷質數 | From: [118.161.1.59] | 發表日期 : 2014-09-20 20:43

我的想法是:使用者輸入一個數 ( x ) 之後,用 for 迴圈讓 x 除以 i ( i2 開始,i 等於 x-1 時為最後一項 ),只要 2x-1 之間任一個數除出來的餘數為 0,就把因數 ( factor ) 的數量 +1

之後再判斷 factor 的數值,如果 factor0 ( 即 2 ~ x-1 之間沒有任何數能整除 x ),就判斷 x 為質數。

不過卻一直出現執行逾時,看了討論之後發現使用sqrt可以解決逾時的問題。

不過難道除了sqrt就沒有其他的方法了嗎?

 

無sqrt程式碼:

#include <iostream>

using namespace std;

int x,factor;


int main() {
  while ( cin >> x )
  {
    for ( int i=2; i<x; i++ )
        {
            if ( x%i == 0 )
            { factor++; }
        }
            if ( factor == 0 )
              { cout << "質數" << endl; factor = 0; }
            else
              { cout << "非質數" << endl; factor = 0; }
  }
    return 0;
}

 

 
ZeroJudge Forum