1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Arduino UNO 3で素数の計算し、ベンチマークする。(除算)

Last updated at Posted at 2024-11-30

参考

x 過去ログを見よ!!
x ICHIKEN様のホームページの内容を非営利、研究調査目的で引用しました。

結果

o_coq670.jpg

プログラム


//0~99991までの整数値を素数判定するのに要した時間を計測する。
#define DEBUG 0
void setup() {
  Serial.begin(9600);
  Serial.println();
  Serial.print("START");
  for(int i = 0;i < 9;i++){
    Serial.print('.');
    delay(500);
  }
  Serial.println();
}
bool isPrime(unsigned long n) {
    // 2未満の数は素数ではない
    if (n <= 1) {
        return false;
    }
    // 2は素数
    if (n == 2) {
        return true;
    }
    // 偶数は素数ではない
    if (n % 2 == 0) {
        return false;
    }
    // nを2からsqrt(n)までの数で割ってみて、割り切れるかどうかを確認
    // 割り切れる場合、素数ではない
    for (unsigned long i = 3; i * i <= n; i += 2) {
        if (n % i == 0) {
            return false;
        }
    }
    // それ以外の場合、素数である
    return true;
}
void loop() {
  
  unsigned long start_time, end_time;
  unsigned long time;
  bool result;
  unsigned long x;
  unsigned long p=0;
  Serial.println("start");
  start_time = millis();
  for(x=0;x<=99991;x++){
    result=isPrime(x);
    if(result == true){p++;}
#if DEBUG
    Serial.print(x);
    Serial.print("\t");
    Serial.println(result);
#endif
  }
  
  end_time = millis();
  time = end_time - start_time;
  Serial.print("END Value:");
  Serial.print(x-1); //最後の値の出力
  Serial.print('-');
  Serial.println(p); //素数のカウントの出力 最適化対策
  Serial.print("StartTime:"); 
  Serial.print(start_time); 
  Serial.print(" EndTime:"); 
  Serial.print(end_time); 
  Serial.print(" Time:"); 
  Serial.println(time); 
  Serial.println(result);   
  delay(1000);//1秒待機
}



修正前 まちがい



//0~50000までの整数値を素数判定するのに要した時間を計測する。
#define DEBUG 0
void setup() {
  Serial.begin(9600);
  Serial.println();
  Serial.print("START");
  for(int i = 0;i < 9;i++){
    Serial.print('.');
    delay(500);
  }
  Serial.println();
}
bool isPrime(unsigned long n) {
    // 2未満の数は素数ではない
    if (n <= 1) {
        return false;
    }
    // 2は素数
    if (n == 2) {
        return true;
    }
    // 偶数は素数ではない
    if (n % 2 == 0) {
        return false;
    }
    // nを2からsqrt(n)までの数で割ってみて、割り切れるかどうかを確認
    // 割り切れる場合、素数ではない
    for (int i = 3; i * i <= n; i += 2) {
        if (n % i == 0) {
            return false;
        }
    }
    // それ以外の場合、素数である
    return true;
}
void loop() {
  
  unsigned long start_time, end_time;
  unsigned long time;
  bool result;
  unsigned long x;
  unsigned long p=0;
  Serial.println("start");
  start_time = millis();
  for(x=0;x<(50000*2);x++){
    result=isPrime(x);
    if(result == true){p++;}
#if DEBUG
    Serial.print(x);
    Serial.print("\t");
    Serial.println(result);
#endif
  }
  
  end_time = millis();
  time = end_time - start_time;
  Serial.print("END Value:");
  Serial.print(x); //最後の値の出力
  Serial.print('-');
  Serial.println(p); //素数のカウントの出力 最適化対策
  Serial.print("StartTime:"); 
  Serial.print(start_time); 
  Serial.print(" EndTime:"); 
  Serial.print(end_time); 
  Serial.print(" Time:"); 
  Serial.println(time); 
  Serial.println(result);   
  delay(1000);//1秒待機
}


1
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?