一、Problem
3257
二、Solution
方法一:枚举
细心啊:
- 第一:要求的是质因数。
- 第二:这些数必的乘积必须等于 n。
不留心,写下这第一版代码,但是不是求质因数的个数啊…
import java.util.*;
import java.math.*;
import java.io.*;
public class Main{
static class Solution {
boolean isPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0)
return false;
}
return true;
}
int dfs(int n) {
int sum = 0;
Set<Integer> set = new HashSet<>();
for (int i = 2; i < n; i++) {
if (n % i == 0 && isPrime(i))
set.add(i);
}
return set.size();
}
boolean check(int n) {
String s = n + "";
return s.indexOf("5") == -1;
}
void init() {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(System.out));
int val = 0;
for (int i = 1; i <= 2020; i++) {
if (check(i))
val += dfs(i);
}
System.out.println(val);
}
}
public static void main(String[] args) throws IOException {
Solution s = new Solution();
s.init();
}
}
修正后…
import java.util.*;
import java.math.*;
import java.io.*;
public class Main{
static class Solution {
boolean isPrime(int n) {
for (int i = 2; i <= n/i; i++) {
if (n % i == 0)
return false;
} return true;
}
int dfs(int n) {
Set<Integer> set = new HashSet<>();
int i = 2;
while (n != 1) {
if (n % i == 0 && isPrime(i)) {
set.add(i);
n /= i;
} else
i++;
} return set.size();
}
boolean check(int n) {
String s = n + "";
return s.indexOf("5") == -1;
}
void init() {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(System.out));
int val = 0;
for (int i = 1; i <= 2020; i++) {
if (check(i))
val += dfs(i);
} System.out.println(val);
}
}
public static void main(String[] args) throws IOException {
Solution s = new Solution();
s.init();
}
}
复杂度分析
- 时间复杂度: ,
- 空间复杂度: ,