此博客主要记录力扣中关于数学的题目
一、素数分解
204. 计数质数 (easy) 2021-07-10
统计所有小于非负整数 n 的质数的数量。
示例 1:
输入:n = 10
输出:4
解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
啪一下写出来,超时了,诶,简单题不简单。
class Solution { public int countPrimes(int n) { int count = 0; for(int j = 1; j < n; j++){ if(isPrime(j) == true){ count++; } } return count; } public boolean isPrime(int n){ if(n == 1){ return false; }else{ for(int i = 2; i <= (int)Math.sqrt(n); i++){ if(n % i == 0){ return false; } } } return true; } }
厄拉多塞筛法,主要思想是将 根号n 以内的数,先将 素数筛出, 2和2的倍数, 3和3的倍数 . . . 筛出。
注意,此方法并不用判断当前的数是不是素数,默认就是,如果判断是否为素数的数组有不是。 另,布尔型数组默认全为false.
class Solution { public int countPrimes(int n) { int count=0; boolean[] flag=new boolean[n]; for(int i=2;i<n;i++){ if(!flag[i]){ count++; for(int j=i+i;j<n;j+=i) flag[j]=true; } } return count; } }
二、七进制
504. 七进制 (easy) 2021-07-10
给定一个整数,将其转化为7进制,并以字符串形式输出。
class Solution { public String convertToBase7(int num) { StringBuffer str = new StringBuffer(); int num_positive = Math.abs(num); while(true){ str.append(num_positive % 7); if(num_positive / 7 == 0) break; num_positive = num_positive / 7; } if(num < 0) str.append('-'); return new String(str.reverse()); } }
三、十六进制
405. 数字转换为十六进制数 (easy) 2021-07-11
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。