初次意识到程序的时间复杂度(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;
}

运行结果如下:

优化后结果:

确实优化了不少呢

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

程序时间计算函数(被tle出阴影来了)的更多相关文章

  1. mysql中时间计算函数SQL DATE_SUB()用法

    本文为博主原创,未经允许不得转载: 在写sql的时候,经常要在sql中传值时间,对时间进行计算并过滤.之前都是将时间在后台计算好,直接传值给sql, 今天发现,有一个更方便的sql函数,可以简化很多代 ...

  2. .Net时间计算函数,统计某一天是一年的第几周,这一周从哪天开始到哪天结束

    /// <summary> /// 计算某年第一周的天数         /// </summary>         /// <param name="dt& ...

  3. opencv学习笔记——时间计算函数getTickCount()和getTickFrequency()

    cv::getTickCount()可以用来测量一段代码的运行时间,这个函数返回从上次开机算起的时钟周期数. 由于我们需要的是某个代码段运行的毫秒数,因此还需要另一个函数cv::getTickFreq ...

  4. MySQL 获得当前日期时间\时间戳 函数 ( 转自传智播客)

    MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); +-------+ | now() | +-- ...

  5. MySQL 获得当前日期时间\时间戳 函数

    MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); +———————+ | now() | +—— ...

  6. Mysql日期转换函数、时间转换函数

    Mysql日期转换函数.时间转换函数 一.MySQL 获得当前日期时间 函数 1,获得当前日期+时间(date + time)函数:now(): select now(); 结果: :: 2,获得当前 ...

  7. mysql中时间日期函数

    转自:mysql 中 时间和日期函数 一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); +- ...

  8. mysql中返回当前时间的函数或者常量

    引用:http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html 1.1 获得当前日期+时间(date + time)函数:now() 除了 now() ...

  9. C# .Net计算函数执行的时间

    C#计算函数执行的时间 protected void StopwatchTest() { System.Diagnostics.Stopwatch stopwatch = new System.Dia ...

随机推荐

  1. 攻防世界 reverse parallel-comparator-200

    parallel-comparator-200 school-ctf-winter-2015 https://github.com/ctfs/write-ups-2015/tree/master/sc ...

  2. python3 list合并

    1 t1=[x for x in range(5)] 2 t2=[x for x in range(5,10)] 3 4 #way1:通过方法extend(),直接修改列表,无返回值 5 # t1.e ...

  3. C++覆盖,隐藏,重载

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  4. 4、MyBatis教程之配置解析

    5.配置解析 核心配置文件 mybatis-config.xml 系统核心配置文件 MyBatis 的配置文件会深深影响 MyBatis 行为的设置和属性信息. 能配置的内容如下: configura ...

  5. Android学习之Broadcast初体验

    •何为 Broadcast ? Broadcast 直译广播,接下来举个形象的例子来理解下 Broadcast: 上学的时候,每个班级都会有一个挂在墙上的大喇叭,用来广播一些通知,比如,开学要去搬书, ...

  6. Codecept实现前端自动化测试

    前言 CodeceptJS是一款UI测试自动框架,它结合了很多市面常见的UI测试自动化框架,封装了大量的API,使得我们编写自动化脚本非常方便,而且相关文档也非常齐全.Codecept.js官网htt ...

  7. Linux命令的应用

    目录 Linux命令 Linux文件管理命令 用户管理 权限管理 vi文本编辑器 find查找命令 磁盘管理命令 压缩及解压 Linux 进程 Linux运行tomcat Linux安装mysql 卸 ...

  8. Spring Cloud 升级之路 - 2020.0.x - 3. Undertow 的 accesslog 配置

    上一节我们讲述了如何使用 Undertow 作为我们的 Web 服务容器,本小节我们来分析使用 Undertow 的另一个问题,也就是如何配置 accesslog,以及 accesslog 的各种占位 ...

  9. (5)MySQL进阶篇SQL优化(优化数据库对象)

    1.概述 在数据库设计过程中,用户可能会经常遇到这种问题:是否应该把所有表都按照第三范式来设计?表里面的字段到底改设置为多大长度合适?这些问题虽然很小,但是如果设计不当则可能会给将来的应用带来很多的性 ...

  10. 热更新解决方案--tolua学习笔记

    一.tolua使用准备工作:从GitHub上下载tolua(说明:这篇笔记使用的Unity版本是2019.4.18f1c1,使用的tolua是2021年4月9日从GitHub上Clone的tolua工 ...