🍓系列专栏:蓝桥杯
🍉个人主页:个人主页
目录
🍪1.判断素数🍪
🥦2.大整数🥦
🍋3.求n的约数个数🍋
🍉4.数学归纳法🍉
🍓5.阶乘之和🍓
素数的定义
素数又称质数,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做素数,否则称为合数(规定1既不是素数也不是合数)
🍭方法1:
遍历从2到n-1的所有数字,判断是否有可以被n整除的数,如果没有,则为素数。
import java.util.Scanner;
public class A {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入要判断的数字:");int n = sc.nextInt();int i = 0;for ( i = 2; i <= n-1 ; i++) {if(n % i == 0){System.out.println(n+"不是素数");break;}}if(i == n){System.out.println(n+"是素数");}}
}
🍭方法2:
判定的范围改为[2 -,n/2]。当 i>n/2 时,则判定为素数。
import java.util.Scanner;
public class A {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入要判断的数字:");int n = sc.nextInt();int i = 0;for ( i = 2; i <= n/2 ; i++) {if(n % i == 0){System.out.println(n+"不是素数");break;}}if(i > n/2){System.out.println(n+"是素数");}}
}
🍭方法3:
在Java中判定素数的范围也可以到sqrt(n),(对n开平方)。对应的函数为:Math.sqrt(n)
public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入要判断的数字:");while(sc.hasNext()) {int n = sc.nextInt();int i = 2;for(;i <= Math.sqrt(n);i++){if(n % i == 0){System.out.println(n+"不是素数");break;}}if(i >Math.sqrt(n)){System.out.println(n+"是素数");}}}
🍭方法4:埃氏筛法
感兴趣的小伙伴看这篇文章
🍭方法5:欧拉筛法
感兴趣的小伙伴看这篇文章
在java中范围最大的基本数据类型是long,它可表示的范围是-263 ~ 263 -1。当我们遇到要表示的数超过了该范围时就必须使用BigInteger类。
比如我们要计算n的阶乘。
BigInteger类的创建:
BigInteger bigInteger = new BigInteger("1");
自定义进制:
BigInteger bigInteger = new BigInteger("1001",2);//2为二进制System.out.println(bigInteger);//输出9
BigInteger类的运算:
加法:
BigInteger a = new BigInteger("10");
BigInteger b = new BigInteger("2");
BigInteger add = a.add(b);// 加法
System.out.println(add);//12
减法:
BigInteger subtract = a.subtract(b); // 减法
System.out.println(subtract);//98
乘法:
BigInteger multiply = a.multiply(b); // 乘法
System.out.println(multiply);//200
除法:
BigInteger divide = a.divide(b); // 除法
System.out.println(divide);//50
取余:
BigInteger mod = a.mod(b); // 取余(只返回正数)
System.out.println(mod);//0
例如:求36 的约数
因为:1*36=36,2*18=36,3*12=36,4*9=36,6*6=36
故36的约数为:1,36,2,18,3,12,4,9,6
总共:9个
🍭方法1:暴力枚举
public static void main(String[] args) {Scanner scanner=new Scanner(System.in);while(scanner.hasNext()) {int n=scanner.nextInt();int count=0;for (int i = 1; i <= n; i++) {if(n%i==0) {count++;}}System.out.println(count); }}
🍭方法2:
由原来i=1 到 i=n 列举 ,变为 i=1 到 i=n/2。
以36举例,36/2=18 18之后的 19 20 21 22 一直到35 都不是36的约数,只有36是。
故此 只需要求出 n/2之前的 约数数量 然后加1 即可。
图示:

public static void main(String[] args) {Scanner scanner=new Scanner(System.in);while(scanner.hasNext()) {int n=scanner.nextInt();int count=0;for (int i = 1; i <= n/2; i++) {if(n%i==0) {count++;}}System.out.println(count+1); }}

嘿嘿嘿,和高中数学很像。
其核心思想:一个个列举,找出规律,然后用代码实现。
输入一个数,判断这个数能不能用互不相等的非负整数的阶乘的和来表示,例如9=1!+2!+3!.
思路:
把0到10的阶乘都算出来 然后用数组存取,从10的阶乘开始,一直的比较然后不断的相减,看最后number 是否等于0,为0则是可以的,否则就不行。
public static void main(String[] args) {int arr[]= new int[10];//arr数组用于存阶乘int fac=1;for (int i = 1; i <=10; i++) {fac=fac*i;arr[i-1]=fac;}
// System.out.println(Arrays.toString(arr));Scanner scanner=new Scanner(System.in);while(scanner.hasNext()) {int number=scanner.nextInt();if(number<0) {System.out.print("no");break;}for (int i =arr.length-1 ; i >=0 ; i--) {if(number>=arr[i]) {number=number-arr[i];}}if(number==0) {System.out.println("yes");}else System.out.println("无解");}}