因子区间[牛客周赛44]

思路分析:

我们可以发现125是因子个数的极限了,所以我们可以用二维数组来维护第几个数有几个因子,然后用前缀和算出来每个区间合法个数,通过一个排列和从num里面选2个 ,c num 2 来计算即可

cpp 复制代码
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#define int long long 
using namespace std;
int n,m;
int w[100005];
int cnt[1000005][150];
signed main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>w[i];
        int num=0;
        for(int j=1;j*j<=w[i];j++){
            if(w[i]%j==0) num+=2;//计算因子数
            if(w[i]==j*j) num-=1;
        }
        cnt[i][num]=1;
        //第i位置上的数有num个因子,这种情况存在,记作1
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=130;j++){
            cnt[i][j]+=cnt[i-1][j];//前缀和
        }
    while(m--)
    {
        int ans=0;
        int a,b;
        cin>>a>>b;
        for(int i=1;i<=130;i++)
        {
            int sum=cnt[b][i]-cnt[a-1][i];
            if(sum)
            ans+=sum*(sum-1)/2;//组合数
        }
        cout<<ans<<endl;
    }
    
    return 0;
}
相关推荐
jojo_zjx7 分钟前
GESP 24年12月2级 数位和
c++
自由的好好干活7 分钟前
PCI9x5x驱动移植支持PCI9054在win7下使用3
c++·驱动开发
踢足球09299 分钟前
寒假打卡:2026-01-24
数据结构·算法
亲爱的非洲野猪30 分钟前
动态规划进阶:多维DP深度解析
算法·动态规划
AlenTech1 小时前
197. 上升的温度 - 力扣(LeetCode)
算法·leetcode·职场和发展
橘颂TA1 小时前
【Linux 网络】TCP 拥塞控制与异常处理:从原理到实践的深度剖析
linux·运维·网络·tcp/ip·算法·职场和发展·结构与算法
tobias.b2 小时前
408真题解析-2010-9-数据结构-折半查找的比较次数
java·数据结构·算法·计算机考研·408真题解析
源代码•宸2 小时前
Leetcode—404. 左叶子之和【简单】
经验分享·后端·算法·leetcode·职场和发展·golang·dfs
WBluuue2 小时前
数据结构与算法:dp优化——优化尝试和状态设计
c++·算法·leetcode·动态规划
im_AMBER2 小时前
Leetcode 105 K 个一组翻转链表
数据结构·学习·算法·leetcode·链表