因子区间[牛客周赛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;
}
相关推荐
源代码•宸4 分钟前
Golang基础语法(go语言结构体、go语言数组与切片、go语言条件句、go语言循环)
开发语言·经验分享·后端·算法·golang·go
l1t10 分钟前
快速加载CSV文件到数据库的工具pg_csv_loader
数据库·算法
fy zs11 分钟前
网络基础概念
linux·网络·c++
辞砚技术录15 分钟前
MySQL面试题——索引、B+树
数据结构·数据库·b树·面试
yugi98783818 分钟前
基于Matlab的晴空指数计算实现
开发语言·算法·matlab
另寻沧海30 分钟前
VS Code 内置变量与配置文件完全指南
c++·vscode
ADI_OP34 分钟前
ADAU1452的开发教程3:常规音频算法的开发(2)
算法·dsp开发·adi dsp中文资料·adi dsp·adi音频dsp·adi dsp开发教程
南桥几晴秋35 分钟前
Qt显示类控件
开发语言·c++·qt
666HZ66636 分钟前
数据结构1.0 数据结构在学什么
数据结构·算法
余瑜鱼鱼鱼41 分钟前
Java数据结构:从入门到精通(五)
数据结构