因子区间[牛客周赛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;
}
相关推荐
凡同学。20 小时前
通信人C++自学
c++·应届生秋招·后端四件套
威桑21 小时前
C++ Linux 环境下内存泄露检测方式
linux·c++
报错小能手21 小时前
C++笔记(面向对象)RTTI操作符
开发语言·c++·笔记
GOATLong21 小时前
git使用
大数据·c语言·c++·git·elasticsearch
兮山与21 小时前
算法24.0
算法
晓北斗NorSnow21 小时前
机器学习核心算法与学习资源解析
学习·算法·机器学习
十五年专注C++开发1 天前
Qt-Nice-Frameless-Window: 一个跨平台无边框窗口(Frameless Window)解决方案
开发语言·c++·qt
hans汉斯1 天前
【计算机科学与应用】基于BERT与DeepSeek大模型的智能舆论监控系统设计
大数据·人工智能·深度学习·算法·自然语言处理·bert·去噪
十子木1 天前
C++ 类似pytorch的库,工具包,或者机器学习的生态
c++·pytorch·机器学习
多喝开水少熬夜1 天前
损失函数系列:focal-Dice-vgg
图像处理·python·算法·大模型·llm