985因子对难题

本文介绍了一道算法题目,旨在找出数组中满足特定条件的因子对数量。通过遍历数组并使用哈希表记录每个数出现的次数,进而统计因子对的数量。该算法考虑了因子对的重复性和有序性。
提交: 19  解决: 8  统计

题目描述

985有 n  n个正整数,他想知道存在多少个合法的因子对 (a[i],a[j])  (a[i],a[j])满足:

a[j]%a[i]==0  a[j]%a[i]==0 && i!=j  i!=j && 1<=i,j<=n  1<=i,j<=n。其中 ij  i,j是元素的下标,从 1n  1−n

特别地,他认为 (a[i],a[j])  (a[i],a[j]) (a[j],a[i])  (a[j],a[i])是相同的。

输入

第一行输入一个整数 T  T,代表有 T  T组测试数据。
每组数据占两行,第一行输入一个 n  n代表元素个数,下面一行输入 n  n个整数 a[]  a[]
注: 1<=T<=301<=n<=10 5 1<=a[]<=10 6   1<=T<=30,1<=n<=105,1<=a[]<=106

输出

一个整数代表最后的答案。

样例输入

2
5
1 2 3 4 5
5
2 2 2 2 2

样例输出

5

10

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int num[1000010];
  
int main()
{
    int i,j,t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        int max=-1;
        memset(num,0,sizeof(num));
        for(i=0; i<n; i++)
        {
            int a;
            scanf("%d",&a);
            num[a]++;//记录每个数出现的次数 
            if(a>max)//记录最大值 
                max=a;
        }
        int count=0;
        for(i=1; i<=max; i++)
        {
            if(num[i])
                for(j=i*2; j<=max; j+=i)
                    count+=num[j]*num[i];//i是当前数,a[i]是当前数的额个数,
					//j是i的倍数,a[j]是i的倍数的个数,相乘可得因子对数;
            count+=num[i]*(num[i]-1)/2;
            //因为重复的数字互相也可以组成因子对,所以如果i有多个的话,
			//需要将重复数字组成的因子对也算上;  
        }
        printf("%d\n",count);
    }
    return 0;
}


内容概要:本文介绍了一个基于Matlab的综合能源系统优化调度仿真资源,重点实现了含光热电站、有机朗肯循环(ORC)和电含光热电站、有机有机朗肯循环、P2G的综合能源优化调度(Matlab代码实现)转气(P2G)技术的冷、热、电多能互补系统的优化调度模型。该模型充分考虑多种能源形式的协同转换与利用,通过Matlab代码构建系统架构、设定约束条件并求解优化目标,旨在提升综合能源系统的运行效率与经济性,同时兼顾灵活性供需不确定性下的储能优化配置问题。文中还提到了相关仿真技术支持,如YALMIP工具包的应用,适用于复杂能源系统的建模与求解。; 适合人群:具备一定Matlab编程基础和能源系统背景知识的科研人员、研究生及工程技术人员,尤其适合从事综合能源系统、可再生能源利用、电力系统优化等方向的研究者。; 使用场景及目标:①研究含光热、ORC和P2G的多能系统协调调度机制;②开展考虑不确定性的储能优化配置与经济调度仿真;③学习Matlab在能源系统优化中的建模与求解方法,复现高水平论文(如EI期刊)中的算法案例。; 阅读建议:建议读者结合文档提供的网盘资源,下载完整代码和案例文件,按照目录顺序逐步学习,重点关注模型构建逻辑、约束设置与求解器调用方式,并通过修改参数进行仿真实验,加深对综合能源系统优化调度的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值