不同算法的100到999之间的素数代码

合集下载

C语言经典算法题目及答案

C语言经典算法题目及答案

C语言经典算法题目及答案题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

组成所有的排列后再去掉不满足条件的排列。

2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k)printf("%d,%d,%d\n",i,j,k);}}====================================== ========================【程序2】题目:企业发放的奖金根据利润提成。

利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。

注意定义时需把奖金定义成长整型。

2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);}====================================== ========================【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

输出1-100之间的所有质数

输出1-100之间的所有质数

输出1-100之间的所有质数
质数定义:在⼤于1的⾃然数中,除了1和它本⾝以外不再有其他因数,这样的数称为质数。

也就是说质数只能被1或者其本⾝两者整除。

思路:要判断n是否是质数,可以⽤n除于不⼤于n的整数(即n%m),当且仅当(n%m==0)&&(n==m)时,n为质数。

⽅法⼀:
public static void prime_1() {
for(int i=2;i<100;i++){
loop:for(int j=2;j<=i;j++){//给内循环定义⼀个标签
if(i%j==0){
if(i==j){//如果i!=j,说明i还能被其他的数整除,i不是质数
System.out.println(i);
}else{
break loop;//跳出内循环
}
}
}
}
}
⽅法⼆:
public static void prime_2() {
int j;
for(int i=2;i<100;i++){
j=2;
while(i%j!=0){
j++;
}
if(i==j){//如果i!=j,说明i还能被其他的数整除,i不是质数
System.out.println(i);
}
}
}
如果想要求所以质数的和,只要在循环⾥⾯定义int sum=0;每当判断是质数时,sum+=i,这样就可以求出所有质数的和了。

素数java代码

素数java代码

素数java代码素数是指只能被1和自己整除的正整数,像2、3、5、7、11等都是素数。

在计算机编程中,判断一个数是否为素数是一项基本的算法。

本文将从Java语言的角度入手,介绍如何编写素数判断的代码,包括两种方法:暴力枚举法和筛法。

一、暴力枚举法暴力枚举法是一种较为简单粗暴的方法,通过一个循环枚举所有可能的因子,判断是否能被整除。

其Java代码如下:public static boolean isPrime(int n) { if (n < 2) { //小于2的数均不是素数 return false; } for (int i = 2; i <= Math.sqrt(n); i++) { if (n % i == 0) { //能被整除,即不是素数 return false; } } return true; //不被整除,即是素数 }首先判断输入的数n是否小于2,如果n小于2,则直接返回false,因为小于2的数均不是素数。

然后从2开始循环到n的平方根,检查是否能被整除,如果能则返回false,否则继续循环,最后返回true表示是素数。

这种方法的时间复杂度为O(√n),因为最多需要枚举n的平方根次数。

在较小的n值的情况下,这种方法较为有效,但当n较大时,效率低下。

二、筛法筛法是用于快速筛选素数的一种高效算法,它的原理是从小到大依次枚举素数,将其倍数标记为合数。

例如,当枚举到2时,将4、6、8、10等标记为合数;当枚举到3时,将6、9、12等标记为合数。

由于合数被标记多次,所以这种方法比暴力枚举法更快。

筛法主要有两种:埃氏筛法和欧拉筛法。

下面分别介绍它们的Java代码实现。

2.1 埃氏筛法埃氏筛法是一种简单直接的筛法,其Java代码如下:public static int[] getPrimes(int n) { if (n < 2) { //小于2的数没有素数 return new int[0]; } boolean[] isPrime = new boolean[n + 1]; //初始化所有数为素数 for (int i = 2; i <= n; i++) { isPrime[i] = true; } for (int i = 2; i <= Math.sqrt(n); i++) { if (isPrime[i]) { //当前数为素数 for (int j = i * i; j <= n; j += i) { //枚举它的倍数isPrime[j] = false; //标记为合数 } } } List<Integer> list = new ArrayList<>(); for (int i = 2; i <= n; i++) { if (isPrime[i]) { //将素数添加到列表中 list.add(i); } } int[] primes = new int[list.size()]; //将列表转成数组 for (int i = 0; i < primes.length; i++){ primes[i] = list.get(i); } return primes; }首先判断输入的n是否小于2,如果n小于2,则返回一个长度为0的素数数组。

计算机二级考试程序设计题目精选

计算机二级考试程序设计题目精选

1题:100个学生一起买小吃,共花钱100元,其中每个大学生花5元,每个中学生花3元,每3个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生为0的解)?程序:main( ){ int a,b,c;for(a=1;a<=20;a++)for(b=1;b<=33;b++){ c=100—a—b;if((20*a+33*b+c/3)= =100)printf(“%d,%d,%d\n”,a,b,c);}getch( );}答案:6种:3,20,77;4,18,78;8,11,81;11,6,83;12,4,84.2题:50个小学生按1至50序号顺时针围成一圈,做出局游戏,老师站在圈外逆时针从最后一个人数起,每数到5时,这人从圈里出来,继续数1,2,3,4,5,数到第5个学生时,他就出局,已出局的位置不再参加记数,直至所有的学生出局为止,问最后一个出局的学生序号是多少号?程序:main(){int i,k,sum,l,t=0;int a[50];clrscr();for(i=1;i<=50;i++)a[i]=1;for(k=1,sum=0,l=0;k<=50;k++){for(i=50;i>0;i--){sum+=a[i];if(sum==5) {sum=0;l++;a[i]=0;}if(l==49) {t=1;break;}}if(t==1)break;}for(i=1;i<=50;i++){if(a[i]==1) printf("%d",i);}getch();}答案:32号3题:50元兑换成5元,2元和1元的计算方法有多少种?程序:main( ){ int x,f,t,n;x=0;f=0;while(f<=10){t=0;while (t<=25){n=50—f*5—T*2;if(n>=o) x++;t++:}f++;}printf(“%d”,x);}答案:1464题:A、B、C三个正整数,当满足1/A*A+1/B*B=1/C*C 关系时,称为倒勾股数。

Java求100以内的质数的四种方法

Java求100以内的质数的四种方法

Java求100以内的质数的四种⽅法质数:⼜称素数,只能被1和它本⾝整除的数就是质数。

难点:需要两层循环,外层循环99遍;内层循环,控制除数为2到98(也就是2到被除数前⾯的⼀个数)。

为什么从2开始?因为所有数都能被1整除。

需要定义⼀个变量flag来记录某个数是不是质数内层循环结束后需要重新把flag重置为true⽅法⼀:import org.junit.Test;public class Demo {@Testpublic void primeNumberTest() {boolean flag = true;for (int i = 2; i <= 100; i++) {for (int j = 2; j < i; j++) {if (i % j == 0) {//为什么要定义变量flag?//因为只能被1和它本⾝整除的才是质数,⽽如果if的判断条件为true//则这个数不是质数。

因为进⼊if判断条件,意味着这个数能被2到i-1的某个数整除flag = false;}}if (flag) {System.out.print(i+",");}//因为内层循环会把flag的值设置为false//如果没有下⾯的语句,flag的值在进⼊内层循环之后将永远为falseflag = true;}}}结果:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,⽅法⼆:与⽅法⼀相⽐有所改进的地⽅,把flag放在外层与内层循环之间,这样就不⽤每次结束内层循环后去重置flag的值。

import org.junit.Test;public class Demo {@Testpublic void primeNumberTest() {for (int i = 2; i <= 100; i++) {//因为flag定义在外层循环与内层循环之间,所以每次开始外层循环时flag的值都是true//这样就不需要在内层循环结束时重置flag的值为true了boolean flag = true;for (int j = 2; j < i; j++) {if (i % j == 0) {//为什么要定义变量flag?//因为只能被1和它本⾝整除的才是质数,⽽如果if的判断条件为true//则这个数不是质数。

求100以内的素数(质数)算法梳理

求100以内的素数(质数)算法梳理

求100以内的素数(质数)算法梳理质数定理:1、从2开始到⾃⾝的-1的数中找到⼀个能整除的(从2开始到⾃⾝开平⽅的数中找到⼀个能整除的)。

2、⼀个合数⼀定可以分解成⼏个质数的乘积,也就是说,⼀个数如果能被⼀个质数整除就是合数。

(使⽤列表保存质数)使⽤定理1的基本写法:(1)n = 100for i in range(2, n):for j in range(2, i):if i % j == 0:breakelse:print(i, end='')这种基本写法效率不⾼,有2点可以改进的地⽅:1、第⼀层循环的i取值时,因为偶数确定不是质数,所以排除偶数,使⽤range()函数排除偶数,range(3, n, 2)这样就减少了⼀半的数。

2、第⼆层循环j取值时,考虑从2开始到i开平⽅取值,同时也把偶数排除range(3, int(i**0.5)+1, 2)这样也可减少⼀半的数。

2就是质数,单独打印。

(2)改进(1)n = 100print(2)for i in range(3, n, 2):for j in range(3, int(i**0.5)+1, 2):if i % j == 0:breakelse:print(i, end='')(3)再(2)的基础上还有优化的点,发现第⼀层循环i取值时,当i>10时,5的倍数也可排除n = 100print(2)for i in range(3, n, 2):if i > 10 and i % 5 == 0:continuefor j in range(3, int(i**0.5)+1, 2):if i % j == 0:breakelse:print(i, end='')(4)利⽤定理2,⽤列表保存上⼀次的运算结果n = 100L = [2]for i in range(3, n, 2):for j in L:if i % j == 0:breakelse:L.append(i)print(L)此种写法的效率不⾼,第⼀层循环的i没必要与列表中的每⼀个元素取余,与从2开始到i的开平⽅处之间的数取余即可。

C语言实验报告 实验四 参考答案

C语言实验报告 实验四  参考答案

实验四循环结构程序设计2(参考答案)(1)编写程序sy4-1.c,输入n,计算并输出如下多项式的值:S n=1+1/2!+1/3!+1/4!+…+1/n!。

例如输入n为15时,输出1.718282。

算法分析:第一项可以看成1/1!,用循环控制累加n个分式,分式的分母是i!,分子固定为1。

参考答案:# include <stdio.h>void main(){double s=0,p=1;int i,n;scanf("%d",&n);for(i=1;i<=n;i++){p = p * i ; //计算分母i!s = s + 1 / p ; //累加}printf("s=%lf\n",s);}运行结果:(2)编写程序sy4-2.c,输入n,根据以下公式计算s:,例如当n=11时,结果为1.833333。

算法分析:该多项式的分母是累加。

参考答案:# include <stdio.h>void main(){double sn=0,s=0;int i,n;scanf("%d",&n);for(i=1;i<=n;i++){s = s + i ; //计算分母1~i的累加和sn = sn + 1 / s ;}printf("sn=%lf\n",sn);}运行结果:(3)编写程序sy4-3.c,计算3~n之间所有素数的平方根之和,要求:输入n,输出结果。

例如,输入n 的值是100,则输出结果是148.874270。

注意n应在2~100之间。

算法分析:穷举3~n之间的数找素数,若是素数则累加她的平方根。

参考答案:# include <stdio.h># include <math.h>void main(){int i,j,n,flag;double s=0;scanf("%d",&n);for(i=3;i<n;i++) //穷举3~n之间找素数{flag=1; //假设当前的i是素数,标志变量设为1for(j=2;j<i;j++) //穷举要判断是否是素数的i的除数,范围2~i-1if(i%j==0) //若i能被j整除,则不是素数{ flag=0; break; } //标志变量改为0,并终止循环if( flag == 1 )s = s + sqrt( i ); //若i是素数,则累加sqrt(i)}printf("s=%f\n",s);}运行结果:(4)编写程序sy4-4.c,根据以下公式求p的值,(m与n为两个正整数且m>n)。

100以内的素数表

100以内的素数表

100以内的素数表
2、3、5、7
11、13、17、19
23、29
31、37
41、43、47
53、59
61、67
71、73、79
83、89
97
推荐两种记忆方法,可以把两种方法结合起来(找到素数表中相似的部分)。

(一)口诀:
二、三、五、七、一十一,(表示:2、3、5、7、11)
十三、十七、一十九。

(表示:13、17、19)
二三九,三一七,(表示:23、29、31、37)
五三九,六一七。

(表示:53、59、61、67)
四一三七,七一三九,(表示:41、43、47、71、73、79)
八三八九,九十七。

(表示:83、89、97)
(二)按“3的倍数”的相似特点。

在“3的倍数”中,如5□可以填1、4、7;
1□可以填2、5、8;
3□可以填0、3、6、9。

也就是把数分成了三部分来记忆:
(1) 11、13、17、19(一十几)
41、43、47(四十几)
71、73、79(七十几)
(2) 23、29(二十几)
53、59(五十几)
83、89(八十几)
(3) 31、37(三十几)
61、67(六十几)
97(九十几)
(三)素数的个数:
20以内素数有8个,50以内素数有15个,100以内素数有25个。

C语言经典算法100例【范本模板】

C语言经典算法100例【范本模板】

【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4.组成所有的排列后再去掉不满足条件的排列.2.程序源代码:main(){int i,j,k;printf("\n”);for(i=1;i〈5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/printf(”%d,%d,%d\n”,i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。

利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7。

5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1。

5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1。

程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型。

2。

程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(”%ld",&i);bonus1=100000*0。

1;bonus2=bonus1+100000*0。

75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0。

3;bonus10=bonus6+400000*0。

100以内的素数表

100以内的素数表

100以内的素数表
2、3、5、7
11、13、17、19
23、29
31、37
41、43、47
53、59
61、67
71、73、79
83、89
97
推荐两种记忆方法,可以把两种方法结合起来(找到素数表中相似的部分)。

(一)口诀:
二、三、五、七、一十一,(表示:2、3、5、7、11)
十三、十七、一十九。

(表示:13、17、19)
二三九,三一七,(表示:23、29、31、37)
五三九,六一七。

(表示:53、59、61、67)
四一三七,七一三九,(表示:41、43、47、71、73、79)
八三八九,九十七。

(表示:83、89、97)
(二)按“3的倍数”的相似特点。

在“3的倍数”中,如5□可以填1、4、7;
1□可以填2、5、8;
3□可以填0、3、6、9。

也就是把数分成了三部分来记忆:
(1) 11、13、17、19(一十几)
41、43、47(四十几)
71、73、79(七十几)
(2) 23、29(二十几)
53、59(五十几)
83、89(八十几)
(3) 31、37(三十几)
61、67(六十几)
97(九十几)
(三)素数的个数:
20以内素数有8个,50以内素数有15个,100以内素数有25个。

C语言经典算法100例

C语言经典算法100例

【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

组成所有的排列后再去掉不满足条件的排列。

2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/printf("%d,%d,%d\n",i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。

利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。

注意定义时需把奖金定义成长整型。

2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);}==============================================================【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

100以内的素数表.

100以内的素数表.

杨老师家教100以内的素数表
2、3、5、7
11、13、17、19
23、29
31、37
41、43、47
53、59
61、67
71、73、79
83、89
97
推荐两种记忆方法,可以把两种方法结合起来(找到素数表中相似的部分)。

(一)口诀:
二、三、五、七、一十一,(表示:2、3、5、7、11)
十三、十七、一十九。

(表示:13、17、19)
二三九,三一七,(表示:23、29、31、37)
五三九,六一七。

(表示:53、59、61、67)
四一三七,七一三九,(表示:41、43、47、71、73、79)
八三八九,九十七。

(表示:83、89、97)
(二)按“3的倍数”的相似特点。

在“3的倍数”中,如5□可以填1、4、7;
1□可以填2、5、8;
3□可以填0、3、6、9。

也就是把数分成了三部分来记忆:
(1)11、13、17、19(一十几)
41、43、47(四十几)
71、73、79(七十几)
(2)23、29(二十几)
53、59(五十几)
83、89(八十几)
(3)31、37(三十几)
61、67(六十几)
97(九十几)
(三)素数的个数:
20以内素数有8个,50以内素数有15个,100以内素数有25个。

经典算法题目

经典算法题目

【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....public class exp2{public static void main(String args[]){int i=0;for(i=1;i<=20;i++)System.out.println(f(i)); }public static int f(int x) {if(x==1 || x==2) return 1;else return f(x-1)+f(x-2); } }【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

【程序3】题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

【程序4】题目:将一个正整数分解质因数。

例如:输入90,打印出90=2*3*3*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

js中,求1~100之间的质数

js中,求1~100之间的质数

js中,求1~100之间的质数质数:质数⼜称素数。

⼀个⼤于1的⾃然数,除了1和它⾃⾝外,不能被其他⾃然数整除的数叫做质数;否则称为(规定1既不是质数也不是合数)。

⽅法如下:for (var i = 2; i <= 100; i++) {var onOff = true; //设置开关,为true时为质数for (var j = 2; j < i; j++) {if (!(i % j)) { //如果遇到能被整除的,就代表不是质数,停⽌这层循环onOff = !onOff;break;}}if(onOff){console.log(i+'是质数');}}// 判断是否是质数此⽅法的效率要⽐上⾯的要⾼很多function isPrime(num){let temp = parseInt(Math.sqrt(num));for(var i = 2; i <= temp; i++){if(num % i == 0){return false}}return true}升级统计所有⼩于⾮负整数n的质数的数量,提⽰:0 <= n <= 5 * 106实例1:输⼊: n = 10, 输出: 4 注:⼩于10的质数⼀共有4个,分别为2 , 3 , 5 , 7.实例2:输⼊: n = 0, 输出: 0实例3:输⼊: n = 1, 输出: 0⽅法如下:var countPrimes = function (n) {let arr = new Array(n).fill(1); // es6新增fill⽅法let count = 0;// 厄拉多塞筛法(质数的倍数⼀定不是质数,过滤掉不是质数的剩下的就是质数)for (let i = 2; i < n; i++) {if (arr[i]) {count++;for (let j = 2 * i; j < n; j += i) {arr[j] = 0;}}}return count;};。

质数的代码

质数的代码

质数的代码质数概念:质数,又称素数,指在一个大于1的[自然数]中,除了1和此整数自身外,无法被其他自然数[整除]的数(也可定义为只有1和本身两个[因数]的数)。

最小的素数是2,也是素数中唯一的[偶数];其他素数都是[奇数]。

质数有无限多个,所以不存在最大的质数。

public static void main(String[] args) {// 求100以内的质数for (int i = 2; i <= 100; i++) { // 质数for (int k = 2; k <= i; k++) { // 除数// 排除所有在 i=k 之前能被k整除(余数为0)的数if (i % k == 0 && i != k) {break;}// 输出所有在 i=k 且 i%k=0的数if (i % k == 0 && i == k) {System.out.println(i);}}}}1:根据定义去求解:也是最笨的方式,效率比较低public static void main(String[] args) {printPrime(1000);}public static void printPrime(int n){for(int i = 2; i < n ; i++){int count = 0;for(int j = 2 ; j<=i; j++){if(i%j==0){count++;}if(j==i & count == 1){System.out.print(i+" "); }if(count > 1){break;}}}}2:平方根public static void main(String[] args) {for(int j = 2; j<1000; j++){if(m(j)){System.out.print(j+" ");}}}public static boolean m(int num){for(int j = 2; j<=Math.sqrt(num);j++){ if(num%j == 0){return false;}}return true;}.public class Primes {public static void main(String[] args) {// 求素数List<Integer> primes = getPrimes(1000);// 输出结果for (int i = 0; i < primes.size(); i++) {Integer prime = primes.get(i);System.out.printf("%8d", prime);if (i % 10 == 9) {System.out.println();}}}/*** 求 n 以内的所有素数* @param n 范围* @return n 以内的所有素数*/private static List<Integer> getPrimes(int n) { List<Integer> result = newArrayList<Integer>();result.add(2);for (int i = 3; i <= n; i += 2) {if (!divisible(i, result)) {result.add(i);}}return result;}/*** 判断 n 是否能被整除* @param n 要判断的数字* @param primes 包含素数的列表* @return 如果 n 能被 primes 中任何一个整除,则返回 true。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//////////////////不同算法的100到999之間的素數代碼!/////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int a,i;
for(a=100;a<=999;a++)
printf("%d ",i);
}
getch();
}
//这个判定中最重要的就是cnt值的变化,cnt不为0时说明已经有合数通过以上的判断,反之到达i=j时依然无法达到判定的要求时,该i为素数,打印~!i在自增再次循环!
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include"stdio.h"
#include"math.h"
#include"conio.h"
void main()
{
int i,j,k;
int cnt=0;
for(i=100;i<=999;i++)
{
cnt=0;
for(j=2;j<=sqrt(i);j++)
{
if(i!=j&&i%j==0)
cnt++;
}
if(cnt==0)
}//以"i>sqrt(a)"來判定a经过"a%i==0"到达i做大人为达到判定为合数的要求来确定素数
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
for(i=2;i<a;i++)
{
else
break;
}
if(i==a)
printf("%d ",a);
}
getchar();
}
if(a%i!=0); //根据a%i!=0来判定是否为合数,当在i<a这个范围你内将a判定为合数,将该次循环跳出,由于另一个if判断,由于i未循环到与a相同时模已经为0所以无法达到下一个if的要求(此次循环已无价值),a自增再次循环当在i<a这个范围内未能判定为合数,同样将跳出循环执行另一个判断a==i,由于素数性质,判定该数为素数,一次打印出来。
#include"math.h"
#include"conio.h"
void main()
{
int a,i;
for(a=100;a<=999;a++)
{
for(i=2;i<=sqrt(a);i++)
{
if(a%i==0)
break;
}
i34;%d ",a);
}
getch();
相关文档
最新文档