判斷素?cái)?shù)時(shí)為什么用sqrt嗎?c語(yǔ)言中求素?cái)?shù)時(shí)為什么要開根號(hào)
- 夕逆IT
- 開發(fā)語(yǔ)言
- 2023-08-13
- 319
python素?cái)?shù)判斷方法python素?cái)?shù)判斷操作如下:mporttimeitfrommathimportsqrtdefisPrimes1(n :ifn<=1:re...
python素?cái)?shù)判斷方法
python素?cái)?shù)判斷操作如下:
mporttimeitfrommathimportsqrtdefisPrimes1(n):ifn<=1:returnFalseforiinrange(2,int(sqrt(n)+1)):ifn%i==0:returnFalsereturnTruedefisPrimes2(n):ifn>1:ifn==2:returnTrueifn%2==0:returnFalseforxinrange(3,int(sqrt(n)+1),2):ifn%x==0:returnFalsereturnTruereturnFalseprint(timeit.timeit("isPrimes1(100)",setup="fromchapter01importisPrimes1",number=10000))print(timeit.timeit("isPrimes2(100)",setup="fromchapter01importisPrimes2",number=10000))
c語(yǔ)言中判斷素?cái)?shù)的方法
C語(yǔ)言判斷素?cái)?shù)(求素?cái)?shù))(兩種方法)
素?cái)?shù)又稱質(zhì)數(shù)。所謂素?cái)?shù)是指除了1和它本身以外,不能被任何整數(shù)整除的數(shù),例如17就是素?cái)?shù),因?yàn)樗荒鼙?~16的任一整數(shù)整除。
思路1):因此判斷一個(gè)整數(shù)m是否是素?cái)?shù),只需把m被2~m-1之間的每一個(gè)整數(shù)去除,如果都不能被整除,那么m就是一個(gè)素?cái)?shù)。
思路2):另外判斷方法還可以簡(jiǎn)化。m不必被2~m-1之間的每一個(gè)整數(shù)去除,只需被2~之間的每一個(gè)整數(shù)去除就可以了。如果m不能被2~間任一整數(shù)整除,m必定是素?cái)?shù)。例如判別17是是否為素?cái)?shù),只需使17被2~4之間的每一個(gè)整數(shù)去除,由于都不能整除,可以判定17是素?cái)?shù)。
原因:因?yàn)槿绻鹠能被2~m-1之間任一整數(shù)整除,其二個(gè)因子必定有一個(gè)小于或等于,另一個(gè)大于或等于。例如16能被2、4、8整除,16=2*8,2小于4,8大于4,16=4*4,4=√16,因此只需判定在2~4之間有無因子即可。
兩種思路的代碼請(qǐng)看解析。
思路1)的代碼:
#include<stdio.h>
intmain(){
inta=0;//素?cái)?shù)的個(gè)數(shù)
intnum=0;//輸入的整數(shù)
printf("輸入一個(gè)整數(shù):");
scanf("%d",&num);
for(inti=2;i<num;i++){
if(num%i==0){
a++;//素?cái)?shù)個(gè)數(shù)加1
}
}
if(a==0){
printf("%d是素?cái)?shù)。\n",num);
}else{
printf("%d不是素?cái)?shù)。\n",num);
}
return0;
}
思路2)的代碼:
#include<stdio.h>
#include<math.h>
voidmain(){
intm;//輸入的整數(shù)
inti;//循環(huán)次數(shù)
intk;//m的平方根
printf("輸入一個(gè)整數(shù):");
scanf("%d",&m);
//求平方根,注意sqrt()的參數(shù)為double類型,這里要強(qiáng)制轉(zhuǎn)換m的類型
k=(int)sqrt((double)m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
//如果完成所有循環(huán),那么m為素?cái)?shù)
//注意最后一次循環(huán),會(huì)執(zhí)行i++,此時(shí)i=k+1,所以有i>k
if(i>k)
printf("%d是素?cái)?shù)。\n",m);
else
printf("%d不是素?cái)?shù)。\n",m);
return0;
}
兩段代碼的輸出結(jié)果相同。
第一次運(yùn)行結(jié)果:
輸入一個(gè)整數(shù):1
1是素?cái)?shù)。
第二次運(yùn)行結(jié)果:
輸入一個(gè)整數(shù):97
97是素?cái)?shù)。
第三次運(yùn)行結(jié)果:
輸入一個(gè)整數(shù):10
10不是素?cái)?shù)。
如何判斷一個(gè)數(shù)是素?cái)?shù)
#include"stdio.h"#include"math.h"main(){inti,k,m;scanf("%d",&i);k=sqrt(i);//判別i是否為素?cái)?shù),只需使2~根號(hào)i之間的每一個(gè)整數(shù)去除for(m=2;m<=k;m++)if(i%m==0)break;if(m>k)printf("%d是素?cái)?shù)",i);elseprintf("%d不是素?cái)?shù)",i);getch();}判斷是否為素?cái)?shù),只需要判斷它是否只能被1和它本身整除。
sqr函數(shù)使用方法
`sqr`函數(shù)是計(jì)算一個(gè)數(shù)的平方的函數(shù),通常用于數(shù)學(xué)和編程中。
在大多數(shù)編程語(yǔ)言中,`sqr`函數(shù)的使用方法如下:
1.傳入一個(gè)數(shù)作為參數(shù),例如:
```
sqr(5)
```
2.函數(shù)將返回該數(shù)的平方,例如:
```
sqr(5)=25
```
在一些編程語(yǔ)言中,`sqr`函數(shù)可能被稱為`pow`函數(shù)或`**`運(yùn)算符。例如,在Python中,可以使用`**`運(yùn)算符來計(jì)算一個(gè)數(shù)的平方,例如:
```
5**2
```
這將返回25,與`sqr(5)`的結(jié)果相同。
需要注意的是,在一些編程語(yǔ)言中,`sqr`函數(shù)可能只能用于整數(shù)或浮點(diǎn)數(shù),而不能用于其他數(shù)據(jù)類型。在使用`sqr`函數(shù)時(shí),應(yīng)該注意參數(shù)的數(shù)據(jù)類型,以避免出現(xiàn)錯(cuò)誤。
c語(yǔ)言中求素?cái)?shù)時(shí)為什么要開根號(hào)
在求素?cái)?shù)時(shí),為了加快求素?cái)?shù)的速度,因此在對(duì)大于2的數(shù)進(jìn)行素?cái)?shù)判斷時(shí),并不需要將其分解為各個(gè)質(zhì)因數(shù),而是可以采用一種稱為“除盡法”的簡(jiǎn)單判斷方法。即只要滿足有一個(gè)數(shù)可以整除,就說明它不是素?cái)?shù),否則就是素?cái)?shù)。
而且可以將要求的被除數(shù)范圍縮小到大于1且小于等于要查找的數(shù)的開根號(hào)即可,因?yàn)槿绻蟮谋怀龜?shù)小于或等于該開根號(hào),那么它將不可能整除該數(shù),可以省去很多不必要的檢查。
C語(yǔ)言編程判斷m是否為素?cái)?shù)
1、首先打開visualC++軟件,按下快捷鍵Crtl+N新建任務(wù),彈出窗口用鼠標(biāo)左鍵點(diǎn)擊文件,選擇C++sourcefile:
2、接下來就編寫主程序,素?cái)?shù)是只能被1和自己整除的數(shù),因此判斷一個(gè)整數(shù)m是否為素?cái)?shù),只需被2~根號(hào)m之間的每一個(gè)整數(shù)去除就可以了。如果m不能被2~根號(hào)m間任一整數(shù)整除,m必定是素?cái)?shù)。所以這里要先去用sqrt求q的更好,在用for循環(huán)計(jì)算每一個(gè)數(shù):
3、程序編完后,就可以查看結(jié)果了,這里輸入17,程序判斷17是素?cái)?shù),在多輸入幾個(gè)數(shù)進(jìn)行判斷,發(fā)現(xiàn)程序可以完美的運(yùn)行:
本文鏈接:http://xinin56.com/kaifa/498.html