T1 质因数个数
思路:分解质因数,从2开始遍历,遇到一个质因数就cnt ++
,然后将n
中的这个质因数除干净,最后的n
如果大于1
,就说明这个数本身是质数或者有一个大于sqrt(n)
的质因数,需要最后再加一。
注意:需要开成long
类型
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
int cnt = 0;
for (long i = 2; i <= n / i; i ++) {
if (n % i == 0) {
while (n % i == 0) {
n /= i;
}
cnt ++;
}
}
if (n > 1) cnt ++;
System.out.print(cnt);
}
}
T2 数位排序
思路:重写小于号或者使用快排
- 方式1:有一个数据超内存(96分)
import java.util.*;
public class Main {
static class Num implements Comparable<Num>{
public int x;
public Num(int x) {
this.x = x;
}
@Override
public int compareTo(Num p) {
String s1 = x + "";
String s2 = p.x + "";
int sum1 = 0, sum2 = 0;
for (int i = 0; i < s1.length(); i ++) {
sum1 += s1.charAt(i) - '0';
}
for (int i = 0; i < s2.length(); i ++) {
sum2 += s2.charAt(i)- '0';
}
if (sum1 != sum2) return sum1 - sum2;
return x - p.x;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), m = sc.nextInt();
Num[] a = new Num[n];
for (int i = 0; i < n; i ++) {
a[i] = new Num(i + 1);
}
Arrays.sort(a);
System.out.print(a[m - 1].x);
}
}
- 方式2(100分)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), m = sc.nextInt();
Integer[] a = new Integer