第 326 场周赛

1.统计能整除数字的位数

统计能整除数字的位数

Solution

class Solution {
public:
    int countDigits(int num) {
        int ans = 0;
        int n = num;
        while(n){
            int t = n % 10;
            if(num % t == 0){
                ans++;
            }
            n /= 10;
        }
        return ans;
    }
};

2.数组乘积中的不同质因数数目

数组乘积中的不同质因数数目

Solution

class Solution {
public:
    int distinctPrimeFactors(vector<int>& nums) {
        unordered_set<int> ans;
        for(auto x : nums){
            //对每一个元素求其质因数
            int i = 2;
            while(i*i <= x){
                if(x % i == 0){
                    ans.insert(i);
                    x /= i;
                    while(x % i == 0){
                        x /= i;
                    }
                }
                i++;
            }
            if(x > 1){
                ans.insert(x);
            }
        }
        return ans.size();
    }
};

3.将字符串分割成值不超过 K 的子字符串

将字符串分割成值不超过 K 的子字符串

Solution

class Solution {
public:
    int minimumPartition(string s, int k) {
        long long ans = 1, sum = 0;
        for(auto x : s){
            int t = x - '0';
            if(t > k) return -1;
            sum = sum * 10 + t;
            if(sum > k){
                ans++;
                sum = t;
            }
        }
        return ans;
    }
};

4.范围内最接近的两个质数

范围内最接近的两个质数

Solution

用到了素数筛,筛出素数暴力跑就行。

class Solution {
public:
    vector<int> closestPrimes(int left, int right) {
        vector<int> prime;
        vector<int> book(right+5,0);
        book[0] = book[1] = 1;
        //质数筛
        for(int i=2;i<=right;i++) {
            if(!book[i]) {
                prime.push_back(i);
            }
            for(int j=0;j<prime.size() && prime[j]*i <= right;j++) {
                book[prime[j] * i] = 1;
            }
        }
        int nums = INT_MAX;
        int len = prime.size();
        vector<int> ans = {-1,-1};
        for(int i = 0;i < len-1;i++){
            if(prime[i] < left) continue;
            if(nums > prime[i+1] - prime[i]){
                ans = {prime[i], prime[i+1]};
                nums = prime[i+1] - prime[i];
            }
        }
        return ans;
    }
};
posted @ 2023-01-01 22:06  TTS-S  阅读(13)  评论(0编辑  收藏  举报