java求100以内的素数

合集下载

素数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的素数数组。

java输出1~100之间的全部素数的5种方式总结

java输出1~100之间的全部素数的5种方式总结

java输出1~100之间的全部素数的5种⽅式总结⽬录需求:输出1~100的所有素数分析java输出素数找出素数规范输出需求:输出1~100的所有素数分析1.素数:判断条件1:只能被1和本⾝整除的称为素数;判断条件2:在区间(1,x/2)中找不到能整除素数x的整数;判断条件3:在区间(1,sqrt(x))中找不到能整除素数x的整数;2.⽅法:很多,但不外是循环嵌套外加条件语句;class PrintSuShu {public static void main(String[] args) {//⽅法⼀:根据素数的定义来遍历检查//外层循环遍历被除数i(因为1既不是素数也不是和数,所以直接从2开始遍历)for (int i = 2; i <= 100; i++) {//定义⼀个逻辑值,初值为trueboolean flag = true;//内层遍历除数jfor (int j = 2; j < i; j++) {//判断是否存在j能整除i,若存在,则更改flag的值并跳出循环if (0 == i % j) {flag = false;break;}}//根据flag的值判断是否输出iif (flag) {System.out.print(i + " ");}}System.out.println('\n' + "---------------------------");//⽅法⼆:根据判断条件2进⾏遍历检查,减少遍历次数//外层循环遍历被除数i(因为1既不是素数也不是和数,所以直接从2开始遍历)for (int i = 2; i <= 100; i++) {//定义⼀个逻辑值flag,初始值为trueboolean flag = true;//内层循环遍历除数j(注意:此处若不取边界,则当i=4时,j=2会因为⼩于i/2=2⽽直接跳出内循环)for (int j = 2; j <= (i / 2); j++) {//判断是否存在除数j能整除i,若存在,则修改flag的值并跳出循环if (0 == i % j) {flag = false;break;}}//根据flag的值判断是否输出iif (flag) {System.out.print(i + " ");}}System.out.println('\n' + "---------------------------");//⽅法三:根据判断条件3进⾏遍历检查,减少遍历次数//外层循环遍历被除数i(因为1既不是素数也不是和数,所以直接从2开始遍历)for (int i = 2; i <= 100; i++) {//定义⼀个逻辑值flag,初始值为trueboolean flag = true;//内层循环遍历除数j(注意:此处若不取边界,则当i=4时,j=2会因为⼩于sqrt(i)=2⽽直接跳出内循环)//再思考⼀下若i=25时呢?若不取边界还有那些不是素数的数会输出呢?for (int j = 2; j <= Math.sqrt(i); j++) {//判断是否存在除数j能整除i,若存在,则修改flag的值并跳出循环if (0 == i % j) {flag = false;break;}}//根据flag的值判断是否输出iif (flag) {System.out.print(i + " ");}}System.out.println('\n' + "---------------------------");/*⽅法四:在⽅法三的前提上优化,优化基础是除2外的所有偶数均不是素数,*(i+=2)只遍历奇数,减少外层遍历次数;同理,由于奇数是不能被偶数整除的,*(j+=2)只遍历奇数,减少内层遍历次数*/System.out.print("2 ");//外层循环遍历被除数i(因为1既不是素数也不是和数,所以直接从2开始遍历)for (int i = 3; i <= 100; i += 2) {//定义⼀个逻辑值flag,初始值为trueboolean flag = true;//内层循环遍历除数j(注意:此处若不取边界,则当i=4时,j=2会因为⼩于sqrt(i)=2⽽直接跳出内循环)//再思考⼀下若i=25时呢?若不取边界还有那些不是素数的数会输出呢?for (int j = 3; j <= Math.sqrt(i); j += 2) {//判断是否存在除数j能整除i,若存在,则修改flag的值并跳出循环if (0 == i % j) {flag = false;break;}}//根据flag的值判断是否输出iif (flag) {System.out.print(i + " ");}}System.out.println('\n' + "---------------------------");//联想⼀下,能被2整除(偶数)的直接剔除,同样的道理,能被3or5整除的剔除掉会不会让外层循环的次数更少呢?//此处才到100,若是1000呢?10000呢?//定义⼀个数组,由于剔除了偶数,故数组长度不会超过总个数的⼀半int[] arr = new int[500];int count = 0;for (int i = 6; i <= 1000; i++) {boolean flag = true;if (0 == i % 2 || 0 == i % 3 || 0 == i % 5) {flag = false;}if (flag) {arr[count] = i;count++;}}System.out.println("6~1000中剔除能被2or3or5整除的数后还剩" + count + "个");System.out.println("1~1000中所有素数为:");System.out.print("2" + "\t");System.out.print("3" + "\t");System.out.print("5" + "\t");count = 0;for (int i = 0; i < 500; i++) {boolean flag = true;if (0 == arr[i]) {break;}for (int j = 7; j <= Math.sqrt(arr[i]); j += 2) {if (0 == (arr[i]) % j) {flag = false;break;}}if (flag) {System.out.print((arr[i]) + "\t");count++;}}System.out.println("\n" + "---------------------");System.out.println("\n" + "其中6~1000中剔除能被2or3or5整除的数中还是素数的有" + count + "个");}}java输出素数java输出1,000,000之内的所有素数找出素数for(n=3;n<=1000000;) {for(i=2;i<n;i++) {if(n%i= =0) break;if(i= =n-1) {su[count]=n;count++;}}n+=2;}加⼆是因为从3开始奇数有可能是素数,第⼀个循环遍历1000000个数,第⼆个循环看它是不是素数。

求1到100之间的所有素数。

求1到100之间的所有素数。
实验二几种算法比较
一、题目
1.求1到100之间的所有素数。
要求用两种方法实现:(1)列举法
(2)用筛法
2.求n!
要求用两种方法实现:(1)递归法
(2)非递归法
二、程序清单
1.(1)列举法
#include <stdio.h>
int fac(int n)
{ int f;
if(n<0)
printf("n<0,data error!");
printf("%d!=%d\n",n,y);
return 0;
}
int fac(int a);
{
int f;
if(n<0)
printf("n<0,data error!");
else if(n==0||n==1)
f=1;
else f=fac(n-1)*n;
return(f);
}
四、运行结果:
第一题的运行结果如下:
第二题的运行结果如下:
五、心得体会
{
if(a[i]!=0 && a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0;
}
printf("\n");
for(i=1,n=0;i<=100;i++)
{
if(a[i]!=0)
{
printf("%5d",a[i]);
n++;
}
if(n==5)
{
printf("\n");
n=0;
}
}

Java素数判断

Java素数判断

Java素数判断题⽬:输出三到⼀百之间的素数,输出任意两个整数之间的素数,输出任意两个整数之间最⼤与最⼩的⼗个素数。

代码:public class Ketang {public static void main(String args[]) throws Exception {int number=0; //⽤于计数输出//输出3到100之间的素数System.out.println("三到⼀百之间的素数如下:");for(int i=3;i<98;i++){if(prime(i)==0){number++;System.out.print(i+" ");}if(number==5){System.out.println();number=0;}}System.out.println();//输出任意两个整数之间的素数System.out.println("输出任意两个素数之间的素数");System.out.print("请输⼊第⼀个整数:");int n1=in_Enter(); //调⽤输⼊⽅法System.out.print("请输⼊第⼆个整数:");int n2=in_Enter();number=0; //重新计数int d1=n1>n2?n1:n2; //判断⼤⼩int x1=n1<n2?n1:n2;int p=0; //⽤于下⾯判断两数之间是否素数个数为0System.out.println("两数之间的素数为:");for(int i=x1;i<=d1;i++){if(prime(i)==0){number++;p=1;System.out.print(i+" ");}if(number==5){System.out.println();number=0;}}if(p==0)System.out.print("不好意思,经判断,两数之间没有素数!");System.out.println();//输出两个数中间的最⼤与最⼩⼗个数System.out.println("输出两个数中间最⼤与最⼩的⼗个素数");System.out.print("请输⼊第⼀个整数:");int n3=in_Enter();System.out.print("请输⼊第⼆个整数:");int n4=in_Enter();int d2=n3>n4?n3:n4; //判断⼤⼩int x2=n3<n4?n3:n4;int j=0; //素数数组下标int sa[]=new int[10]; //素数数组for(int i=0;i<10;i++){ //赋初值sa[1]=0;}for(int i=x2;i<=d2;i++){ //最⼩的⼗个if(prime(i)==0){sa[j]=i; //数组赋值j++; //每赋值成功⼀个,下标加1}if(j==10)break;}outPut(j,sa); //调⽤输出⽅法j=0; //下标为0,重新开始计数for(int i=d2;i>=x2;i--){ //最⼤的⼗个if(prime(i)==0){sa[j]=i; //数组赋值j++; //每赋值成功⼀个,下标加1}if(j==10)break;}outPut(j,sa); //调⽤输出⽅法}//判断素数public static int prime(int n){int is_Prime=1; //⽤于输出判断if(n==2) //2是素数return is_Prime=0;elsefor(int i=2;i<=n/2+1;i++) //判断是否为素数if(n%i == 0)return is_Prime=1;return is_Prime=0;}//输⼊⽅法public static int in_Enter(){String enter="";int num;int n=1;while(n==1){try{BufferedReader in=new BufferedReader(new InputStreamReader(System.in));enter=in.readLine();char[] ca=enter.toCharArray(); //转换为char数组,判断输⼊是否合法for(int i=0;i<ca.length;i++){ //判断,如果输⼊不合理,则重新输⼊if(ca[i]<'0'||ca[i]>'9'){ //判断n=1;System.out.print("输⼊不合法!请重新输⼊:");break;}elsen=0;}}catch(IOException e){}}return num=Integer.parseInt(enter);}//输出⽅法public static void outPut(int b,int s[]){int a=0; //重新计算每⾏的个数if(b<10){ //两数中间素数个数不⾜⼗个if(b==0) //两数中间没有素数System.out.println("两数中间的素数个数为0!");else{System.out.println("两数中间只有"+b+"个素数,这⼏个素数分别为");for(int i=0;i<b;i++){System.out.print(s[i]+" ");a++;if(a==5){ //每⾏五个输出System.out.println();a=0;}}}}else{System.out.println("这些素数分别为:");for(int i=0;i<10;i++){System.out.print(s[i]+" ");a++;if(a==5){ //每⾏五个输出System.out.println();a=0;}}}}}得考虑的地⽅:1)2是素数,在判断素数的⽅法中得单独判读。

java如何判断一个数是否是素数(质数)

java如何判断一个数是否是素数(质数)

java如何判断⼀个数是否是素数(质数)⽬录java判断⼀个数是否是素数(质数)质数(prime number)⼜称素数,有⽆限个思路java 求1-100之间的质数质数定义:1、质数实例⼀2、质数实例⼆3、质数实例三4、质数实例四5、质数实例五6、质数实例六java判断⼀个数是否是素数(质数)质数(prime number)⼜称素数,有⽆限个质数定义为在⼤于1的⾃然数中,除了1和它本⾝以外不再有其他因数,这样的数称为质数。

import java.util.Scanner;public class TestWork {public static void main(String[] args) {boolean isPrime = true;Scanner sc = new Scanner(System.in);System.out.println("请输⼊⼀个正整数");int num = sc.nextInt();if (num > 0) {int k = (int) Math.sqrt(num);//k为num的正平⽅根,取整数for (int i = 2; i <= k; i++) {if (num % i == 0) {isPrime = false;//不是素数break;}}}if (isPrime) {System.out.println(num + "是素数");} else {System.out.println(num + "不是素数");}}}输出1~1000之间的素数思路偶数肯定不是素数,所以递增的时候可以以奇数的形式递增,再在奇数中去掉⾮质数的数。

public class TestWork {public static void main(String[] args) {boolean isPrime = true;int PrimeCount=0;for (int i = 3; i <= 1000; i+=2) {int k = (int) Math.sqrt(i);//k为num的正平⽅根,取整数isPrime = true;for (int j = 2; j <= k; j++) {if (i % j == 0) {isPrime = false;//不是素数break;}}if (isPrime) {PrimeCount++;System.out.print(i+"\t");if(PrimeCount%5==0){System.out.println();}}}}}java 求1-100之间的质数质数定义:质数⼜称素数。

输出3到100的素数

输出3到100的素数

1. 输出3到100的素数#include<stdio.h>main(){int i,t;for (i=3;i<=100;i++){ for(t=2;t<=i;t++)if(i%t==0)break;if(t==i)printf("%d\t",i);}}2. 判断a是不是素数? #include<stdio.h>main(){int a,i;scanf("%d",&a);for(i=2;i<a;i++)if(a%i==0)break;if(a==i)printf("%d是素数",a);elseprintf("%d不是素数",a);}3. 编写程序,使数组10个元素的值分别为0到9,然后逆序输出。

#include<stdio.h>main(){int i,a[10];for(i=0;i<10;i++)a[i]=i;for(i=9;i>=0;i--)printf("%4d",a[i]);printf("\n");}4. 从键盘输入10个数,找出最大值及其位置#include<stdio.h>void main(){int ab[10],i,max,pos;for(i=0;i<10;i++)scanf("%d",&ab[i]);max=ab[0];pos=0;for(i=1;i<10;i++)if(max<ab[i]){max=ab[i];pos=i;}for(i=0;i<10;i++)printf("max=%d,postion=%d",max,pos+1); }5. 判断是不是水仙花数#include<stdio.h>main(){int t,a,b,c;scanf("%d",&t);a=(t-t%100)/100;c=(t%100)%10;b=(t%100-c)/10;if(t==a*a*a+b*b*b+c*c*c)printf("%d",t);elseprintf("无效");}6.在3到1000的全部润年#include<stdio.h>main(){int year;for(year=3;year<=1000;year++){if(!(year%4==0&&year%100!=0||year%400==0)) continue;printf(“%4d”,year);}}7. 求1+2+3+4…+100之和#include<stdio.h>main(){int i,s;s=0;for(i=1;i<=100;i++)s=i+s;printf("s=%d",s);}或者#include<stdio.h>main(){int i,s;s=0;i=1;do{s=s+i;i++;}while(i<=100);printf("s=%d,i=%d\n",s,i);}7.求n!#include<stdio.h>main(){int n,i,p=1;int n,i;scanf(“%d”,&n);for(i=1;i<=n;i++)p=p*i;printf(“%ld\n”,p);}8.输入三个实数a,b,c要求从小到大的顺序输出#include<stdio.h>main(){float a,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;b=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);}9.判断年份是不是润年?#include<stdio.h>main(){int year;printf("请输入年份");scanf("%d",&year);{if(year%4==0&&year%100!=0||year%400==0)printf("%4d是闰年",year);elseprintf("%4d不是润年",year);}}10.寻找1-999中的水仙花数#include<stdio.h>main(){int i,j,k;for(i=1;i<10;i++)for(j=0;j<10;j++)for(k=0;k<10;k++)if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)printf( "%d\t ",(i*100+j*10+k)); }11.比较大小#include<stdio.h>main(){int a,b,c,max;scanf("%d%d%d",&a,&b,&c);if(a>b)if(a>c)max=a;elsemax=c;elseif(b>c)max=b;elsemax=c;printf("max=%d\n",max);}12.任意输入一行大写字母,将它们转换成小写字母后输出。

输出质数(Java)

输出质数(Java)输出质数⼀、什么是质数 质数⼜称素数。

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

⼆、代码实现1.输出100以内的质数import java.util.ArrayList;import java.util.List;public class PrimeNumber{/** 1-100* 1 3 5 7 11 13 17* 只能被1和本⾝整除** */public static void main(String[] args){boolean flag;List<Integer> priArr = new ArrayList<>();for (int i=2;i<100;i++){flag=true;for (int j=2;j<=Math.sqrt(i);j++)//Math.sqrt()⽅法是对i开根号{if (i%j==0){flag=false;//如果为false说明这个数不是质数break;}}if (flag)//是质数flag就是ture{priArr.add(i);}}for (int s:priArr){System.out.print(s+“ ”);}}}2.输⼊需要输出多少以内的素数import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class PrimeNumber {/** 1-100* 1 3 5 7 11 13 17* 只能被1和本⾝整除** */public static void main(String[] args){System.out.println("请输⼊需要输出多少以内的质数:");Scanner scanner=new Scanner(System.in);int x=scanner.nextInt();boolean flag;List<Integer> priArr = new ArrayList<>();for (int i=2;i<x;i++){flag=true;for (int j=2;j<=Math.sqrt(i);j++)//Math.sqrt()⽅法是对i开根号{if (i%j==0){flag=false;//如果为false说明这个数不是质数break;}}if (flag)//是质数flag就是ture{priArr.add(i);}}for (int s:priArr){System.out.print(s+“ ”);}}}三、运⾏结果四、总结 找质数主要运⽤了双重for循环,和⽤flag作为⼀个标识。

java求100以内的素数示例分享

这篇文章主要介绍了java生成图片验证码实例代码验证码的种类有很多问题验证短信验证还有常见的图片验证本文就为大家介绍生成图片验证码最简单方法感兴趣的小伙伴们可以参考一下
java求 1内的素数
方法一:
package airthmatic;
public class demo8 { /** * 素数是指因数只有1和本身的数字 * @param arg */ public static void main(String arg[]) { for(int i=1;i<=100;i++) { if(find(i)) System.out.print(i+" "); } } /** * 1-n个自然数中的素数 * @param n * @return */ public static boolean find(int n) { for(int i=2;i<=Math.sqrt(n);i++) { if(n%i==0) return false; } return true; } }
方法二:
public class Ex27 { public static void main(String args[]) { int sum,i; for(sum=2;sum<=100;sum++) { for(i=2;i<=sum/2;i++) { if(sum%i==0)
break; } if(i>sum/2) System.out.println(sum+"是素数"); } } }

计算小于100的最大素数的代码

计算小于100的最大素数的代码
素数也叫质数,是大于1的自然数中除了1和它本身没有其他因数的数。

从数学历史上看,素数是数论研究的重要研究对象,它们在数论中发挥着重要的作用。

素数的特殊性质使得素数可以用来加密息,并且在安全数字息加密技术中发挥着重要的作用。

计算机可以用来计算小于100的最大素数。

下面给出的代码可以用来计算小于100的最大素数:```int n=100;int
prime=2;for(int i=3;i<n;i++){ int j;
for(j=2;j<=i/2;j++){ if(i%j==0)
break; }
if(j>i/2){ prime=i; }}printf("%d\n",prime);```以上代码的执行步骤是:首先,定义一个变量n,将其值设置为
100,表示要计算100以下的最大素数。

然后,定义一个变量prime,将其值设置为
2,表示默认最大素数为
2。

接着,使用for循环,从3开始,依次判断小于n的每一个数是否为素数,如果是,则将该数赋值给prime,否则仍将prime的值保持不变。

最后,使用printf函数将prime的值输出,即可获得小于100的最大素数。

从上面可以看出,通过计算机代码,我们可以轻松计算出小于100的最大素数。

素数的应用非常广泛,如数论研究中素数的重要性,安全数字息加密技术等,因此,素数的计算对我们有重要的意义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档