第20講 if文以外のループ処理
第5話 do...while文による素数探索シングルスレッド版の書き換え
次のように素数探索シングルスレッド版を書き換えると、
どうなるでしょうか。
#include<iostream>
#include<math.h>
using namespace std;
using namespace System;
int cn;
void f(int a);
char h(int a);
int main(){
int n;
DateTime^ hj=DateTime::Now;
cout<<"素数の探索範囲をキーボードから入力してください。"<<endl<<"n=";
scanf("%d",&n);
cn=1;
f(n);
DateTime^ ow=DateTime::Now;
TimeSpan sa=ow->Subtract(*hj);
cout<<"1から"<<n<<"までの素数の総数は"<<cn<<"です。"<<endl;
cout<<"計算時間は"<<sa.TotalSeconds<<"秒です。"<<endl;
}
void f(int a){
int i=3;
//cout<<"2"<<" ";
do{
if(h(i)){
//cout<<i<<" ";
cn++;
}
i+=2;
}while(i<=a);
//cout<<endl;
}
char h(int a){
int i=3;
do{
if(a%i==0)return(0);
i+=2;
}while(i<=(int)sqrt((double)a));
return(1);
}
実行結果
while文の版と比較すると
数字が1つ少なくなっています。
実は、do...while文版の方はある数をカウントから漏らしています。
そのため実数より一つ少なくなってしまうのです。
何がカウントされていないかわかりますか。
そして、原因が何であるかわかりますか。
第4話へ 第6話へ
C言語 C++講義第1部へ
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)