算法笔记—03:常见数学概念及相关算法

1.质数:一般又称 素数,是指 只能被1和自身整除 的大于1的自然数。

2.因数:b能整除a,就说 b 是 a 的因数。


例1:线性筛选素数(比如求 1—N 的素数)

筛选步骤:

  1. 先将1挖掉(因为1不是素数)
  2. 把2的倍数的筛选出来滤掉
  3. 3的倍数滤掉
  4. 4不用(因为在2的时候已经滤过了)
  5. 5的倍数也滤掉,后面同理...
  6. 我们这样只需要这样循环到sqrt(n)就ok了,(因为加入m不是素数,除了1和自身外至少还有两个因子,并且这两个因子一个是小于等于 sqrt(m),一个是大于等于sqrt(m),所以我们只需要判断到 m 的 sqrt(m) 就可以了。)
import java.util.Arrays;  
import java.util.Scanner;  
 
public class Test { 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();  //求1到n之间的所有素数
		int[] array = new int[n];  //定义一个数组,默认值为0,那么就把0 当作为素数,1当作合数
		//0,1 不是素数
		array[0] = 1;
		array[1] = 1;
		for(int i = 2; i < Math.sqrt(n); i++){   //从2开始
			if(array[i] == 0 ){
				for(int j = i*i ; j < n; j+=i){
					array[j] = 1;
				}
			}
		}
		for(int x = 0 ; x < n; x++){
			if(array[x] == 0){
				System.out.println(x);
			}
		}
	}
}

java中常用的Math类的方法:

  1. double  sqrt (double  n) :  返回n的平方根
  2. double  pow (double a, double b) :  返回a的b次幂的值
  3.  min (a , b)  :  返回两个中较小的一个
  4.  max (a , b) : 返回a,b中较大的一个
  5.  double  random( ) : 返回一个大于等于0且小于1.0的值,常用来产生随机数
  6.  abs (a) : 返回a的绝对值
  7. Math.PI : 返回double类型的 π值

闰年(二月29天):普通闰年:能被4整除但不能被100整除;世纪闰年:能被四百整除。闰年有366天。

平年(二月28天):有365天。

例2:用java判断是不是闰年

import java.util.Scanner;
public class LeapYear {
    public static void main(String[] args) {    
        Scanner input = new Scanner(System.in);
        System.out.print("请输入年份:");
        int year = input.nextInt();
         
        if((year % 4 == 0 && year % 100 != 0) || year % 400 ==0)
            System.out.print(year + "年是闰年。");
        else 
            System.out.print(year + "年不是闰年。");
    }
}

复数 (complex):z = a + bi(a,b均为实数)其中a称为实部,b称为虚部,i称为虚数单位。当z的虚部b等于零时,常称z为实数;当z的虚部b不等于零时,实部a等于零时,常称z为纯虚数

复数的模:

共轭复数:z = a - bi

例3:复数表示及相乘

import java.util.Scanner;
//主方法
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		double a = sc.nextDouble();
		double b = sc.nextDouble();
		Complex z = new Complex(a,b);
        Complex z2 = z.multiply(new Complex(a,b));
        System.out.println(z2.toString());;
	}
}

import java.math.BigInteger;
//定义一个复数类
public class Complex {

	private double a;
	private double b;
	
	public Complex(double a, double b) {	//带参数的构造
		this.a = a;
		this.b = b;
	}
	
	public double getA() {
		return a;
	}
	public void setA(double a) {
		this.a = a;
	}

	public double getB() {
		return b;
	}
	public void setB(double b) {
		this.b = b;
	}

	public Complex multiply(Complex z) {
		double a2 = z.getA();
		double b2 = z.getB();
		double newA = a*a2-b*b2;
		double newB = a*b2+a2*b;
		Complex result = new Complex(newA,newB);
		return result;
	}
	
	public String toString() {
		return a+"+"+b+"i";
	}
}

未完待续...

猜你喜欢

转载自blog.csdn.net/jingzhi111/article/details/88726095