程序时间计算函数(被tle出阴影来了)

初次意识到程序的时间复杂度(tle多了

第一次写博客(被大佬们的博客所折服orz)

拿打素数表的程序为例

优化前代码:

#include<iostream>
#include<cmath>
#define ll long long
using namespace std;


int a[1000000];
int main()
{
	int k=0;
	for(int i=2;i<1000000/2;i++)
	{
		int flag=0;
		for(int j=2;j<=sqrt(i);j++)
		{
			if(i%j==0)
			{
				flag=1;
				break;
			 } 
		}
		if(flag==0)
		a[k++]=i;
	}
	return 0;
}

优化后代码如下:

#include<iostream>
#include<cmath>
#define ll long long
using namespace std;

int check(int a)
{
	int b=sqrt(a);
	for(int i=2;i<=b;i++)
	if(a%i==0) return 0;
	return 1;
}

int a[1000000];
int main()
{
	int k=0;
	for(int i=2;i<=1000000/2;i++)
	if(check) a[k++]=i;
	return 0;
}

我们要对比一下两者运行时间的差别,也就是看到两者打表时各自所用的时间:

clock_tclock()CLOCKS_PER_SEC三个语句
均在头文件time.h里面。

代码如下:

#include<iostream>
#include<cmath>
#include<time.h>
#define ll long long
using namespace std;


int a[1000000];
int main()
{
	clock_t start, finish;
    //clock_t为CPU时钟计时单元数
	int k=0;
	start = clock();
    //clock()函数返回此时CPU时钟计时单元数
	for(int i=2;i<1000000/2;i++)
	{
		int flag=0;
		for(int j=2;j<=sqrt(i);j++)
		{
			if(i%j==0)
			{
				flag=1;
				break;
			 } 
		}
		if(flag==0)
		a[k++]=i;
	}
	finish = clock();
    //clock()函数返回此时CPU时钟计时单元数
    cout << "the time cost is" << double(finish - start) / CLOCKS_PER_SEC<<"s"<<endl;
    //finish与start的差值即为程序运行花费的CPU时钟单元数量,再除每秒CPU有多少个时钟单元,即为程序耗时
	return 0;
}

运行结果如下:

在这里啊

优化后结果:
在这里插入图片描述

确实优化了不少呢

参考博客:快速幂大佬的博客

posted @ 2021-02-09 22:30  gonghw403  阅读(47)  评论(0编辑  收藏  举报