因子区间[牛客周赛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;
}
相关推荐
Swift社区5 分钟前
LeetCode 449 - 序列化和反序列化二叉搜索树
算法·leetcode·职场和发展
charlie1145141919 分钟前
深入理解CC++的编译与链接技术9:动态库细节
c语言·开发语言·c++·学习·动态库
isyoungboy16 分钟前
c++使用win新api替代DirectShow驱动uvc摄像头,可改c#驱动
开发语言·c++·c#
CoderYanger21 分钟前
贪心算法:3.最大数
java·算法·leetcode·贪心算法·1024程序员节
lxmyzzs21 分钟前
【图像算法 - 37】人机交互应用:基于 YOLOv12 与 OpenCV 的高精度人脸情绪检测系统实现
算法·yolo·人机交互·情绪识别
muyouking1122 分钟前
Zig 语言实战:实现高性能快速排序算法
算法·排序算法
世转神风-26 分钟前
qt-windows用户点击.exe,报错:缺少libgcc_s_seh-1.dll
c++·qt
CoderYanger27 分钟前
贪心算法:5.最长递增子序列
java·算法·leetcode·贪心算法·1024程序员节
慕容青峰30 分钟前
【牛客周赛 107】E 题【小苯的刷怪笼】题解
c++·算法·sublime text
算法熔炉35 分钟前
深度学习面试八股文(2)——训练
人工智能·深度学习·算法