6278. 统计能整除数字的位数
代码
class Solution {public int countDigits(int num) {int ans = 0;for (int i = num; i > 0; i /= 10) {if (num % (i % 10) == 0) ans++;}return ans;}
}
6279. 数组乘积中的不同质因数数目
代码1
因为单个数字最大是 1000,所以我们求出来 1000以内的所有素数,然后遍历数组,计算每个数的质因子即可
class Solution {public int distinctPrimeFactors(int[] nums) {int[] f = new int[1000];get_Primes(1000);for (int k = 0; k < nums.length; k++) {int t = nums[k];for (int i = 0; i < cnt && primes[i] <= t; i++) {int p = primes[i];while (t % p == 0 && t > 0) {f[p] = 1;t /= p;}}}int ans = 0;for (int i = 0; i < 1000; i++) if (f[i] == 1) ans++;return ans;}private int[] primes = new int[1000]; // 存储所有素数private int[] vis = new int[1005]; // 存储 i 是否被筛掉了private int cnt = 0; // 记录素数个数// 线性筛法求素数private void get_Primes (int n) {for (int i = 2; i <= n; i++) {if (vis[i] == 0) primes[cnt++] = i;for (int j = 0; primes[j] <= n / i; j++) {vis[primes[j] * i] = 1;if (i % primes[j] == 0) break;}}}
}
代码2
遍历分解质因子,用哈希表存起来即可
class Solution {public int distinctPrimeFactors(int[] nums) {HashSet<Integer> set = new HashSet<>();for (int n : nums) {for (int i = 2; i * i <= n; i++) {if (n % i == 0) {set.add(i);while (n % i == 0) n /= i;}}if (n > 1) set.add(n);}return set.size();}
}