【蓝桥杯-筑基篇】基础数学思维与技巧(2)
创始人
2024-06-01 16:42:43

🍓系列专栏:蓝桥杯

🍉个人主页:个人主页

目录

🍪1.判断素数🍪

🥦2.大整数🥦

🍋3.求n的约数个数🍋

🍉4.数学归纳法🍉

🍓5.阶乘之和🍓


 

🍪1.判断素数🍪

素数的定义

素数又称质数,一个大于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:欧拉筛法

感兴趣的小伙伴看这篇文章

🥦2.大整数🥦

在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

🍋3.求n的约数个数🍋

例如:求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);	}}

🍉4.数学归纳法🍉

 嘿嘿嘿,和高中数学很像。

其核心思想:一个个列举,找出规律,然后用代码实现。

🍓5.阶乘之和🍓

输入一个数,判断这个数能不能用互不相等的非负整数的阶乘的和来表示,例如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("无解");}}

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...