参考
x 過去ログを見よ!!
x ICHIKEN様のホームページの内容を非営利、研究調査目的で引用しました。
結果
プログラム
//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秒待機
}