計算にかかる時間を測定する

ここでは、素因数分解のコードを例に挙げ、計算にかかる時間の測定方法を示します。エッセンスは以下の様式です。clock()はCPUのクロックを取得するため、1秒あたりのクロック数CLOCKS_PER_SECにより除算して秒数を割り出します。なお、この関数で求められる秒数はCPU時間です。このようにしてプログラム中の各部分の処理時間を測定することにより、プログラム中のどの部分がボトルネックになっているかを突き止める際の手がかりとすることができます。

      clock_t start,end;
      start = clock();
      //ここに時間を測定したい処理
      end = clock();
      printf("%.8fsec\n",(double)(end-start)/CLOCKS_PER_SEC);
      

素因数分解のソースコード

//
//  factor
//
//  Copyright 2015 Yuki Mochizuki
//

#include <iostream>
#include<math.h>

using namespace std;

long factor(long n1){
    long temp;
    
    while(n1%2==0){
        n1/=2;
        cout<<2<<endl;
    }
    
    temp=3;
    while(temp<=pow(n1,0.5)){
        if(n1%temp==0){
            n1/=temp;
            cout<<temp<<endl;
        }
        else{temp+=2;}
    }
    if(n1!=1){cout<<n1<<endl;}
    cout<<endl<<endl;
    return 0;
}

int main()
{
	
    long n1=1;
    clock_t start,end;
    while(n1 !=0){
        cout<<"input composite number<2147483647 (press 0 to close)"<<endl;
        cin>>n1;
        if(n1==0)return 0;
        
        cout<<"prime factor;"<<endl;
		start = clock();
        factor(n1);
        end = clock();
		printf("%.8fsec\n",(double)(end-start)/CLOCKS_PER_SEC);   
    }
    return 0;
}