質(zhì)數(shù)又稱素?cái)?shù)。一個(gè)大于1的自然數(shù),如果除了1和它自身外,不能被其他自然數(shù)整除的數(shù);否則稱為合數(shù)。根據(jù)算術(shù)基本定理,每一個(gè)比1大的整數(shù),要么本身是一個(gè)質(zhì)數(shù),要么可以寫成一系列質(zhì)數(shù)的乘積;而且如果不考慮這些質(zhì)數(shù)在乘積中的順序,那么寫出來(lái)的形式是唯一的。下面是一個(gè)java求100之內(nèi)的素?cái)?shù)簡(jiǎn)單示例。
10年積累的成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有同德免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
public class test {
public static void main(String[] args) {
int i,n,k=0;
for (n = 3; n=100; n++) {???? //3~100的所有數(shù)
i=2;
while (in) {
if (n%i==0)? break;? //若能整除說(shuō)明n不是素?cái)?shù),跳出當(dāng)前循環(huán)
i++;
}
if (i==n) {???? //如果i==n則說(shuō)明n不能被2~n-1整除,是素?cái)?shù)
k++;???????????? //統(tǒng)計(jì)輸出數(shù)的個(gè)數(shù)
System.out.print(i+ "\t ");
if (k %6==0)??? //每輸出5個(gè)則換行
System.out.println();
}
}
}
}
法一:
class Test2
{
public static void main (String []args)
{ int j;
for(int n=1;n=100;n++)
{
for(j=2;j=n-1;j++)
{
if(n%j==0)
break;
}
if(j=n-1)
System.out.println(n);
}
}
}
法二:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class sushu extends Applet implements ActionListener{
TextField t1=new TextField(5);
TextField t2=new TextField(5);
Button b1=new Button("begin");
int m,n;
public void init(){
add(t1);
add(t2);
add(b1);
b1.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
m=Integer.parseInt(t1.getText());
n=Integer.parseInt(t2.getText());
repaint();
}
public void paint(Graphics g){
boolean f;
int i,j,k=0;
for(i=m;i=n;i++){
f=true;
for(j=2;j=i-1;j++)
if(i%j==0)
{f=false;break;}
if(f){
g.drawString(" "+i,(k%10)*20+20,(k/10)*60+80);
k=k+1;
}
}
}
}
首先樓主應(yīng)該對(duì)素?cái)?shù)的定義已經(jīng)清楚了吧?其實(shí)就是一個(gè)數(shù),如果存在1和它本身以外,有數(shù)能整除它,這個(gè)數(shù)就不是素?cái)?shù).
在這里,有2個(gè)關(guān)鍵的變量,我估計(jì)解釋一下你就能看得明白這個(gè)算法了.
1.關(guān)于變量k.變量k的作用是優(yōu)化整個(gè)算法,因?yàn)楸热缫袛嘁粋€(gè)數(shù)13是不是素?cái)?shù),我們沒必要從2循環(huán)到13.只要循環(huán)到對(duì)13開根號(hào).13開根號(hào)大概是3.6多,強(qiáng)轉(zhuǎn)為int類型后是3.也就是說(shuō)只要檢查2,3是否能整除13.如果不能,13肯定是一個(gè)素?cái)?shù).因?yàn)楸热?8這個(gè)數(shù),你前面檢測(cè)到被4整除等于12,那么繼續(xù)循環(huán)超過Math.sqrt(48)的話,無(wú)非就是得到一個(gè)反過來(lái)的被12除等于4的結(jié)果.這個(gè)沒有必要.
2.關(guān)于變量j.注意點(diǎn)1:j是在最外層的循環(huán)體中定義的.這個(gè)時(shí)候剛定義完,j的值是初始的0.然后j從2開始,一直到小于等于k結(jié)束.這里是控制嘗試整除的循環(huán)次數(shù).一旦發(fā)現(xiàn)在這個(gè)范圍內(nèi)有數(shù)能整除i,那么就跳出循環(huán).
所以,對(duì)于你不理解的那個(gè)部分,首先確定一點(diǎn),程序只要執(zhí)行到break,就說(shuō)明這個(gè)數(shù)是素?cái)?shù).
例如我們這次k = 10,那么是要從j = 2到10逐一檢測(cè) i 是不是能被 j 整除.當(dāng)j = 7的時(shí)候比如可以整除了,就跳出當(dāng)前內(nèi)層循環(huán)了.這時(shí)候, j 顯然是不大于 k 的,因?yàn)橹灰侵型咎?因?yàn)閮?nèi)層循環(huán)(j = 2; j = k; j++)的控制,只要在循環(huán)過程中跳出來(lái)的,那么j 肯定 = k.
只有循環(huán)到j(luò) = 10依然沒有break的話,根據(jù)for循環(huán)的執(zhí)行順序,會(huì)執(zhí)行j++,然后去判斷j = k 是否為true,為true則繼續(xù)下一次循環(huán),否則循環(huán)結(jié)束.而在這里,如果到10還沒有能夠整除的話,j是會(huì)在10的基礎(chǔ)上自增的.這時(shí)候j就=11了.
那么if ( j k )就不成立了,則i 不會(huì)被輸出.
總結(jié)一點(diǎn):就是如果中途or最后一次循環(huán),找到能整除的數(shù)了,那么因?yàn)閎reak的關(guān)系,最后就不會(huì)執(zhí)行 j++, 所以j k (亦即j = k 的取反)表示沒有找到能整除的數(shù).其實(shí)j最大也就只能等于k+1.
另外,,你也可以自己修改修改,來(lái)加深理解.例如
boolean isPrime; //定義布爾變量判斷是否素?cái)?shù).是:true;否:false
for (int i = 3; i = 100; i++) {
isPrime = true;
int k = (int) Math.sqrt(i);
for (int j = 2; j = k; j++) {
if (i % j == 0) {
isPrime = false; //如果能夠有數(shù)整除i,那么就不是素?cái)?shù).
break;
}
}
if (isPrime) {
System.out.println(i);
}
}
這樣就沒有必要在外層循環(huán)里就定義j這個(gè)變量了.如果我上面說(shuō)的你理解還是比較困難,可以先理解用布爾變量來(lái)控制的寫法.這個(gè)理解了,用j k 判斷的就也很容易理解了.
這個(gè)的主要點(diǎn)是嵌套的循環(huán),要注意循環(huán)要遍及數(shù)據(jù)的循環(huán)、邏輯判斷,素?cái)?shù)就是表示除1及其本身外不能被其他比他小的整數(shù)整除,掌握這點(diǎn)就可以理解了,下面代碼僅供參考:
//實(shí)現(xiàn)求1-100之間的所有素?cái)?shù)
public?class??Test
{
public?static?void?main(String[]?args)?
{
//使用外層循環(huán)來(lái)控制1-100的數(shù)據(jù)的遍歷
for(int?i?=?1?;?i?=?100?;?i++){
//素?cái)?shù)就是除1及其本身外不能被其他整數(shù)整除
int?j?=?2;
while(i??j){
//如果可以被小于他的數(shù)據(jù)整除,表示該數(shù)不是素?cái)?shù),跳出循環(huán)
if(i?%?j?==?0){
break;
}
j++;
}
//如果沒有找到比其小的數(shù)據(jù)可以整除,則表示該數(shù)是素?cái)?shù)
if(i?==?j){
System.out.println(i);
}
}
}
}
我給你個(gè)算法,言簡(jiǎn)意賅
int?n?=?23;//所求素?cái)?shù)范圍(0-n以內(nèi))
int?j?=?1;
for?(int?i?=?2;?i??n;?i++)?{
for?(j?=?2;?j??i;?j++)?{
if?(i?%?j?==?0)
break;
}
if?(j?=?i)?{
System.out.println(i);
}
}
import?java.util.Scanner;
//質(zhì)數(shù)又稱素?cái)?shù),是指在一個(gè)大于1的自然數(shù)中,除了1和此整數(shù)自身外,不能被其他自然數(shù)整除的數(shù)
public?class?PrimeNumber?{
public?static?void?main(String[]?args)?{
Scanner?scan?=?new?Scanner(System.in);//?掃描器,接收控制臺(tái)輸入信息
System.out.print("請(qǐng)輸入一個(gè)整數(shù):");
try?{
int?num?=?scan.nextInt();//?取出控制臺(tái)輸入的信息
if?(isPrime(num))?{//?調(diào)用isPrime()方法
System.out.println(num?+?"是素?cái)?shù)!");//?若isPrime()方法返回true,輸出是素?cái)?shù)
}?else?{
System.out.println(num?+?"不是素?cái)?shù)!");//?若isPrime()方法返回false,輸出不是素?cái)?shù)
}
}?catch?(Exception?e)?{
System.out.println("請(qǐng)輸入整數(shù)");//?捕捉異常,若輸入的不是整數(shù),輸出異常
}
}
/**
?*?pre
?*?用于判斷一個(gè)數(shù)是否為素?cái)?shù),若為素?cái)?shù),返回true,否則返回false
?*?/pre
?*?
?*?@param?a
?*????????????輸入的值
?*?@return?true、false
?*/
public?static?boolean?isPrime(int?a)?{
boolean?flag?=?true;
if?(a??2)?{//?素?cái)?shù)不小于2
return?false;
}?else?{
for?(int?i?=?2;?i?=?Math.sqrt(a);?i++)?{
if?(a?%?i?==?0)?{//?若能被整除,則說(shuō)明不是素?cái)?shù),返回false
flag?=?false;
break;//?跳出循環(huán)
}
}
}
return?flag;
}
}
當(dāng)前名稱:java代碼算素?cái)?shù),素?cái)?shù)算法java
網(wǎng)站地址:http://m.2m8n56k.cn/article10/hogodo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、定制網(wǎng)站、靜態(tài)網(wǎng)站、商城網(wǎng)站、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)