首页 > 编程知识 正文

输入一个整数判断是否为素数,怎么判断是否为素数

时间:2023-05-06 04:02:20 阅读:50331 作者:3620

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不是素数。 先筛掉。 选择剩下的数中最小的数作为素数,去除其倍数。 依次类推直到筛空时结束。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。