首页 > 其他分享 >[leetcode]2584. 分割数组使乘积互质 (质因数分解)

[leetcode]2584. 分割数组使乘积互质 (质因数分解)

时间:2023-03-08 20:13:03浏览次数:86  
标签:2584 因数分解 int len st 互质 id

题目链接:分割数组使乘积互质
思路:指针循环从\([0,len-1)\)每次动态维护指针左边所有数与指针右边所有数质因数交集,第一次交集为0的地方为答案。首先将打表\(10^6\)之内的质数,这样质因数分解快一些。
\(Code:\)

class Solution {
public:
    #define ll long long
    #define pb push_back 
    const int N = 1e6 + 10;
int tot;
int prime[1000010];
bool st[1000010];
void get_it() {
    for (int i = 2; i <= 1000000; ++i) {
        if (st[i]) continue;
        prime[++tot] = i;
        if (i >= 10000) continue;
        for (int j = i * i; j <= 1000000; j += i) { st[j] = true; }
    }
}
int cnt[1000010];
vector<int> arr[10100];
void work(int x, int id) {
    int i = 1;
    while (prime[i] * prime[i] <= x) {
        if (x % prime[i] == 0) {
            while (x % prime[i] == 0) x /= prime[i];
            cnt[prime[i]]++;
            arr[id].pb(prime[i]);
        }
        i++;
    }
    if (x != 1) {
        cnt[x]++;
        arr[id].pb(x);
    }
}
int res = 0;

int findValidSplit(vector<int>& nums) {
    get_it();
    int id = 0;
    for (auto i : nums) { work(i, id++); }
    memset(st, 0, sizeof st);
    int len = nums.size();
    if (len == 1) return -1;
    for (int i = 0; i < len - 1; ++i) {
        for (auto j : arr[i]) {
            cnt[j]--;
            if (cnt[j] == 0) {
                if(st[j]){
                    res--;
                }
            } else if (!st[j]) {
                res++;
            }
            st[j] = true;
        }
        if (res == 0) return i;
    }
    return -1;
}
};

标签:2584,因数分解,int,len,st,互质,id
From: https://www.cnblogs.com/violentbear/p/17195930.html

相关文章

  • C++质因数分解
    朴素算法从\([2,\sqrt(N)]\)进行遍历vector<int>GetFactor(intN){vector<int>res;for(inti=2;i*i<=N;++i){if(N%i==0){......
  • 335-分割数组使乘积互质
    分割数组使乘积互质给你一个长度为n的整数数组nums,下标从0开始。如果在下标i处分割数组,其中0<=i<=n-2,使前i+1个元素的乘积和剩余元素的乘积互质,则......
  • [第335场周赛]质因数分解,多重背包
    喜提AK以及最佳排名:6307. 递枕头提示简单3相关企业​​n​​ 个人站成一排,按从 ​​1​​ 到 ​​n​​ 编号。最初,排在队首的第一个人拿着一个枕头。每秒钟,拿着枕头......
  • 【算法设计-枚举、分治】素数、约数、质因数分解
    目录1.素数判定2.素数筛选法3.质因数分解4.求一个数的约数5.求两个数的最大公约数(GCD)6.求两个数的最小公倍数(LCM)1.素数判定判定从2到sqrt(n)依次能否把n整除,......
  • AD82584F兼容替代TAS5707/TAS5711,用于智能音箱语音辨识的2x25W立体声数字音频功放,带I2
    AD82584F是一种数字音频放大器,能够将一对8Ω负载扬声器驱动到25W(BTL)和将4Ω负载扬声器驱动到50W(PBTL),播放音乐不需要外部散热器或风扇。AD82584F提供先进的音频处理功能,如音......
  • 数论笔记3-素因数分解式和取整函数
    1.素因数分解式的性质在第一篇里面我们证明了算术基本定理.下面我们对素因数分解式进行更细致的考察.首先我们对分解式中相同的素数进行合并,得到\(a=p_1^{\alpha_1}......
  • 分成互质组 (dfs算法)
    Description给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?Input第一行是一个正整数n(1≤n≤10)。第二行是n个不大于10000的正......
  • 快速对一个数进行质因数分解(预处理可降低为log复杂度)
    对一个数进行质因子分解的朴素做法是O(sqrt(n))的试除法如果可以预处理出mindiv[i]数组,即每个数的最小质因子,则进行因式分解时,可以对数n,不断执行n/=mindiv[n],即可分解。......
  • RSA(质因数分解,数论)
    RSA(质因数分解,数论)题意​ 给定两个正整数A,B,大小为1e12。如果他们是不同的质数,那么输出”fullcredit“;否则,若A*B是一个大于1的整数的平方的倍数,输出“nocredit";否则......
  • CF 264B(质因数分解)
    D.GoodSequencestimelimitpertestmemorylimitpertestinputoutputn 有......