第一题:质因数分解
![](https://i-blog.csdnimg.cn/blog_migrate/6fea087d82c115eb3729a5ea93e42ec3.png)
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc= new Scanner(System.in);
int n = sc.nextInt();
int bak = n ;
int max= 0 ;
//质因数分解 模版
for(int i=2 ; i*i<=n;i++) {
while(bak%i==0) {
max=Math.max(max,i);
bak/=i;
}
}
if(bak>1)System.out.println(max>bak?max:bak);
}
}
第二题:质数
![](https://i-blog.csdnimg.cn/blog_migrate/cb6c957e4a23fbeb728504649e800abb.png)
import java.util.Scanner;
public class Mian {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0 ;
for(int i =2 ;i<n;i++) {
if(check(i) ) {
System.out.print(i+" ");
count++;
}
}
System.out.println();
System.out.println(count);
}
//判断素数
static boolean check(int m ) {
int bak = m ;
for(int i = 2 ; i*i <=m ; i++) {
if(bak%i==0) return false;
}
return true;
}
}
第三题:棋盘放麦子
![](https://i-blog.csdnimg.cn/blog_migrate/62d4e22f57216a6216d1cc8116f7e9e2.png)
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger big = new BigInteger("1");
BigInteger sum = BigInteger.valueOf(0);
for(int i = 0 ; i <=62;i++) {
big = big.multiply(BigInteger.valueOf(2));
sum= sum.add(big);
}
System.out.println(sum.add(BigInteger.valueOf(1)));
}
}
第四题:等差数列
![](https://i-blog.csdnimg.cn/blog_migrate/2511ea0e38a3715469caf155c76e0c04.png)
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a[] = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
Arrays.sort(a);
int max = a[a.length - 1];
int min = 9999999;
//找到公差
for (int i = a.length - 1; i > 0; i--) {
min = Math.min(min, a[i] - a[i - 1]);
}
if (min == 0) {
System.out.println(n);
return;
}
//n = n (an-a1)/2+1(从0开始)
System.out.println((max - a[0]) / min + 1);
}
}
第五题:数数
![](https://i-blog.csdnimg.cn/blog_migrate/6553530ebc179ffbafdc4d9e1f42f5dc.png)
package 算法提高;
public class 数数001 {
public static void main(String[] args) {
int count =0 ;
for(int i = 2333333 ; i<= 23333333;i++) {
int bak = i ;
int num = 1;
int c = 0 ;
//模板
for(int j = 2; j<=bak/j;j++) {
while(bak%j==0) {
c++;
num*=j;
bak/=j;
}
}
if(bak>1) {
c++;
num*=bak;
}
if(c==12&&num==i) {
count++;
}
}
System.out.println(count);
}
}
第六题:约数个数
![](https://i-blog.csdnimg.cn/blog_migrate/6a2ede65f3ea5dda392fa07d7b5b2646.png)
public class Main {
public static void main(String[] args) {
int count =1,sum=0;
int n= 1200000;
int bak = n ;
for(int i = 2;i*i<=n;i++) {
while(bak %i==0) {
bak /=i;
sum++;
}
count*=(sum+1);
sum=0;
}
if(bak>1) count*=2;
System.out.println(count);
}
}
第七题:质数拆分
![](https://i-blog.csdnimg.cn/blog_migrate/ff48391dbf9b25df7d4683e37dc9c3d6.png)
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=2019;
int sum=1;
//存方法个数
long dp[][]=new long[400][2020];
//存储质数
int[] arry=new int[400];
//从2遍历到2019的质数
for(int i=2;i<2019;i++){
if(zhishu(i)){
arry[sum]=i;
sum++;
}
}
//和为0时,相加的方法为1;
dp[0][0]=1;
//时间复杂度,306<2019
//遍历质数,dp[0][0]已经被定义了,从1开始
for(int i=1;i<sum;i++) {
//遍历和等于0~2019的情况
for(int j=0;j<2020;j++) {
//质数大于和的时候,肯定不需要加入到加法中去,方法数不变
dp[i][j]=dp[i-1][j];
//质数小于等于和的时候,加入到加法中去,方法数为:和为J时需要相加的加法数字中没有i的方法数(没有i)+和为J-arry[i]时
//需要相加的加法数字中没有i的方法数(i带来的)
if(arry[i]<=j) {
dp[i][j]=dp[i-1][j]+dp[i-1][j-arry[i]];
}
}
}
System.out.println(dp[sum-1][2019]);
}
//判断是否为质数-----除1和本身还有其他除数
public static boolean zhishu(int a) {
for(int i=2;i<a;i++) {
if(a%i==0) {
return false;
}
}
return true;
}
}
第八题:合数个数
![](https://i-blog.csdnimg.cn/blog_migrate/e645f75571d166af903d42abec011c40.png)
第九题:阶乘约数
![](https://i-blog.csdnimg.cn/blog_migrate/f2785ff7cca8ab5658a63c20ac13ad8a.png)
package 打卡;
public class 阶乘约数 {
public static void main(String[] args) {
long sum = 1, count = 0;
int jc [] = new int[101];
for (int i = 2; i <= 100; i++) {
int bak = i; //备份i
for (int j = 2; j <= bak; j++) {
while (bak % j == 0) {
bak /= j;
jc[j]++;
}
}
}
for(int m :jc) {
sum*=m+1;
}
System.out.println(sum);
}
}
第十题:合数个数
![](https://i-blog.csdnimg.cn/blog_migrate/2aa54c309fb705cb80a83261da94ab0e.png)
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int n = sc.nextInt();
BigInteger big = new BigInteger("1");
for(int i = 1 ; i <=n;i++) {
//用上一次的 和接下来的进行比较
big = lcm(big,BigInteger.valueOf(i));
}
System.out.println(big.toString());
}
static BigInteger lcm(BigInteger a , BigInteger b ) {
return a.multiply(b).divide(a.gcd(b));
}
}
第十一题:找素数
![](https://i-blog.csdnimg.cn/blog_migrate/a591da81bbab7b39a3fba6f9cae20e2f.png)
package fytyfytyu;
public class 找素数 {
public static void main(String[] args) {
int count = 0;
for (int i = 2; i <= 1000000000; i++) {
if ((i > 10) && (i % 2 == 0 || i % 3 == 0 || i % 7 == 0 || i % 5 == 0))// 进行剪枝
continue;
if (check(i)) {
count++;
System.out.println("i=" + i + ",count=" + count);
if (count == 100002) {
System.out.println(i);
return;
}
}
}
}
static boolean check(int n) {
for (int i = 2; i * i <= n; i++) {
if (n % i == 0)
return false;
}
return true;
}
}
第十二题 : 纯质数
![](https://i-blog.csdnimg.cn/blog_migrate/46b54692d02224f7e51767c90dd46197.png)
package 最新.java11届国赛;
public class 纯质数 {
public static void main(String[] args) {
int count = 0 ;
for(int i = 2 ; i <= 20210605;i++) {
if((i>10)&&(i%2==0||i%3==0||i%5==0||i%7==0)) continue;
if(check(i)&&isNum(i)) {
System.out.println(i);
count++;
}
}
System.out.println(count);
}
static boolean check(int n ) {
for(int i = 2 ; i*i<=n;i++) {
if(n%i==0) return false;
}
return true;
}
static boolean isNum(int n ) {
String str = n + "";
String ff = "486901";
for(int i = 0 ; i <str.length();i++) {
if(ff.contains(str.charAt(i)+"")) return false;
}
return true;
}
}
第十三题:核桃的数量
![](https://i-blog.csdnimg.cn/blog_migrate/1d51ae1fb15a951e8656486755c7fc71.png)
import java.util.*;
public class Main {
// 求 a 和 b 的最大公约数
public static int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
// 求 a 和 b 的最小公倍数
public static int lcm(int a, int b) {
return a * b / gcd(a, b);
}
// 求三个数的最小公倍数
public static int lcm(int a, int b, int c) {
return lcm(lcm(a, b), c);
}
public static void main(String[] args) {
Scanner sc =new Scanner (System.in);
int a = sc.nextInt(), b = sc.nextInt(), c=sc.nextInt();
System.out.println(lcm(a, b, c)); // 输出:12
}
}