根据自己这段时间刷蓝桥杯的经历,整理了一些,简单又容易忘记的常用数论算法,用于复习,也希望大家都能取得好成绩。
闰年,平年:
闰年:366天,其中2月份29天
public static boolean check(int n) {
if(n % 4 == 0 && n % 100 != 0 || n % 400 == 0) return true;
return false;
}
求两个数的最小公倍数:
public static int mingb(int a, int b) {
int minone = Math.min(Math.abs(a), Math.abs(b));
int maxys = 1;
for(int i = 1; i <= minone; i ++)
if(a % i == 0 && b % i == 0)
maxys = i;
return a * b / maxys;
}
判断质数(素数):
质数只有1和它本身两个因数
public static boolean check(int n) {
if(n == 1) return false;
if(n <= 3) return true;
for(int i = 2; i * i <= n; i ++)
if(n % i == 0) return false;
return true;
}
存约数(因数):
若 b != 0, 且 a 除 b 商刚好没有余数则b为a的约数
存约数代码:
public static List a = new ArrayList<Integer>();
public static void getys(int n) {
for(int i = 1; i * i <= n; i ++) {
if(n % i == 0) {
a.add(i);
if(n / i != i) a.add(n / i);
}
}
}
打印约数代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
getys(5);
for(int i = 0; i < a.size(); i ++)
System.out.print(a.get(i) + " ");
}
public static List a = new ArrayList<Integer>();
public static void getys(int n) {
for(int i = 1; i * i <= n; i ++) {
if(n % i == 0) {
a.add(i);
if(n / i != i) a.add(n / i);
}
}
}
}
查n的位数:
查10进制n,对应10进制位数
:
public static int solve(int n) {
int cnt = 0;
while(n > 0) {
n = n / 10;
cnt ++;
}
return cnt;
}
查10进制n对应2进制位数
:
public static int solve(int n) {
int cnt = 0;
while(n > 0) {
n = n / 2;
cnt ++;
}
return cnt;
}
查10进制对应m进制位数也是同理
最后也是希望考试的时候不要太急,不要图快,保证质量让会做的题尽可能得更高的分数,一步一个脚印。