因子区间[牛客周赛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;
}
相关推荐
naruto_lnq几秒前
C++中的工厂方法模式
开发语言·c++·算法
一切尽在,你来2 分钟前
C++多线程教程-1.2.3 C++并发编程的平台无关性
开发语言·c++
千逐-沐风10 分钟前
SMU-ACM2026冬训周报2nd
算法
寄存器漫游者29 分钟前
数据结构 C语言 顺序栈
java·c语言·数据结构
郝学胜-神的一滴36 分钟前
深入解析Linux网络编程之bind函数:从基础到实践的艺术
linux·服务器·网络·c++·websocket·程序人生
m0_7482331738 分钟前
C#与C语言:5大核心语法共性
java·jvm·算法
雾岛听蓝1 小时前
C++11 列表初始化与右值引用核心解析
开发语言·c++·经验分享
痴儿哈哈1 小时前
C++与硬件交互编程
开发语言·c++·算法
小O的算法实验室1 小时前
2024年ESWA SCI1区TOP,异构无人机配送问题的集成多目标优化方法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
日拱一卒——功不唐捐1 小时前
循环队列+双端队列(C语言)
c语言·数据结构