time命令输出的信息
[1] real :表示整个程序需要时间。 可以理解为,在foo的执行开始时刻看手表,在程序执行结束时看手表,两次的时间差是这次real代表的值
[2]user :该时间表示foo在用户状态下运行的cpu时间。 什么意思?
首先,谈谈用户的状态和中心状态。
核心状态(内核模式) :
在内核状态下,代码可以完全访问基本硬件,而不受限制。 可以执行任意的CPU指令,访问任意的存储器地址。 内核状态通常由操作系统提供,并针对可靠的底层代码执行。 内核状态代码崩溃是灾难性的,影响整个系统。
——in kernel模式, theexecutingcodehascompleteandunrestrictedaccesstotheunderlyinghardware.itcanexecuteanycpuinstructionandreferenceanymemoryadwadware eservedforthelowest-level,mosttrustedfunctionsoftheoperatingsystem.crashesinkernelmodearecatase they will halt the entire PC
用户模式:
在用户状态下,代码没有直接访问硬件和访问内存的能力,必须使用操作系统提供的可靠的底层API访问硬件和内存。 这种隔离保护作用允许用户状态代码崩溃并恢复系统。 我们的大部分代码都在用户状态下运行。
——输入用户模式, theexecutingcodehasnoabilitytodirectlyaccesshardwareorreferencememory.coderunninginusermodemustdelegatetosystemapistoacceshshoreshoreceshemoreshor eprotectionaffordedbythissortofisolation,crashesinusermodearealwaysrecoverable.mostofthecoderunning
为什么要区分Kernel Mode和用户模式呢? 答案是隔离保护,让系统更稳定。
好的,说完用户状态和核心状态后,我们来看看用户时间。 如上所述,这是指程序foo在用户状态下运行的cpu时间,cpu时间指的是cpu的运行时间,而不是墙上的时钟经过的时间。
sys :表示foo在核心状态下运行的cpu时间
1 .根据素数的定义
也就是说,能被1或其自身整除的自然数(不含1 )称为素数/素数。
# includeiostreamusingnamespacestd; # definemax 10000 bool isprime (intn ) if ) n==1)返回假; for(intI=2; in; I ) if(n%I==0)返回假; }返回真; }intmain(intargc,char const* argv[] ) { int n=0; while(nmax ) if (isprime ) n ) ) coutn't '; }返回0; }统计需要时间
2 .利用定理
如果一个数是质数,那么其最小质因数一定是=其卡方。例如,50,最小质因数是2,250的卡方。
不是总数。 那是质数。 根据上面的定理,如果一个数能被他的卡方=的所有数整除,那一定是合数,反之就是素数。 这将大大减少导线测量的数量。
# include iostream # include math.husingnamespacestd; # definemax 10000 bool isprime (intn ) ) intsqtmp=sqrt ) n; if(n==1)返回假; for(intI=2; i=Sqtmp; I ) if(n%I==0)返回假; }返回真; }intmain(intargc,char const* argv[] ) { int n=0; while(nmax ) if (isprime ) n ) ) coutn't '; }返回0; }统计需要时间
3 .用筛法求素数。
这种方法效率很高,但内存消耗很大。
用筛法求素数的基本思想是把从1开始的某个范围内的正整数按从小到大的顺序排列。 1不是素数。 先筛掉。 选择剩下的数中最小的数作为素数,去除其倍数。 依次类推直到筛空时结束。