牛客OI赛制测试赛2 A 无序组数
2024-09-30 09:10:51
链接:https://www.nowcoder.com/acm/contest/185/A
来源:牛客网
题目描述
给出一个二元组(A,B)
求出无序二元组(a,b) 使得(a|A,b|B)的组数
无序意思就是(a,b)和(b,a) 算一组.
求出无序二元组(a,b) 使得(a|A,b|B)的组数
无序意思就是(a,b)和(b,a) 算一组.
输入描述:
第一行数据组数 T(1≤T≤10000)
接下来T行,每行两个正整数 A,B(1≤A,B≤10000)
输出描述:
共T行,每行一个结果
输入例子:
1
4 6
输出例子:
11
-->
$n^2$的暴力应该无脑写吧,就不在此多说了,直接讲正解。
a和b$\le$10000,我不知道在一个循环里,for(i=1 ->max(a,b)),然后判断i与a,b的大小这样来枚举a,b的因数可不可以过,$1000 \times 10000$说不定可以试试。
我们来说我比较安全的解法。
我们需要先找出A,B每个数的因子个数,当然我们需要枚举,假设我们在枚举找出A的一个a,那么A/a又何尝不是另一个因子,这样的话我们找到一个因子,因子数加2,当然这个数最大为
为$\sqrt A \times \sqrt A$,所以我们对于每个T最多枚举$ \sqrt A + \sqrt B$次,当然对于$\sqrt A$是A 的因子这种$i = A/ i $的情况需要特殊判断一下,只能因字数加1.
对于A的每个因子,用一个数组标记一下,为了方便判断B的因子中有多少个与之相同的数的个数。
同样的方法,我们求出B的同时记录有多少个相同的因子。
下面来说找出相同的因子数的个数怎么用。
设A的因字数为:1 3 4 5
设B的因子数为:1 4 5 7
我们用A的因子来配B的因子:1(4种),3(4种),4(3种),5(2种)
我们发现若这个数不是公共因子,那么对于每个数情况个数都为B的因子数量,若为公共因子,第一次出现情况数为B的因字数,第二次出现为B的因字数-1,第三次-2...。
那么答案就可以计算为:A的因子的个数$\times$B的因子的个数-1-2-...-(公共因子数-1)。
对于-1-2..这部分可以稍微优化一下,作用不是很大啦。
if(sumv%==)sumv=(sumv+)*(sumv/);
else sumv=(sumv+)*(sumv/)+; //sumv表示公共因子个数。
代码:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int T,a,b,suma,sumb,sumv;
bool vis[];
int main()
{
scanf("%d",&T);
while(T--)
{
memset(vis,,sizeof(vis));
suma=sumb=sumv=;
scanf("%d%d",&a,&b);
int p=sqrt(a);
int q=sqrt(b);
for(int i=; i<=p; i++)
{
if(a%i==)
{
if(a/i==i)suma+=,vis[i]=;
else suma+=,vis[i]=vis[a/i]=;
}
} for(int i=; i<=q; i++)
{
if(b%i==)
{
if(b/i==i)sumb+=,sumv+=vis[i];
else sumb+=,sumv+=vis[i],sumv+=vis[b/i];
}
}
sumv--;
if(sumv%==)sumv=(sumv+)*(sumv/);
else sumv=(sumv+)*(sumv/)+;
printf("%d\n",suma*sumb-sumv);
}
}
最新文章
- React.js 官网入门教程 分离文件 操作无法正常显示HelloWord
- 我的Android第二章
- 无需写try/catch,也能正常处理异常 (转)
- Windows Embedded Standard 7 (WES7)系统定制遇到的问题(摄像头,喇叭,无线wifi)
- Mysql学习笔记(一)
- 配置 Cocoapods的简单配置及胡思乱想
- ubuntu下hadoop2.6在eclipse上的配置
- 【转】调整mac电脑鼠标移动速度
- javaweb-番外篇-Commons-FileUpload组件上传文件
- 数据库文件*.sdf文件定时备份,但是大小的增量在不断增长的问题排查
- python_函数设计
- 使用 Helm 包管理工具简化 Kubernetes 应用部署
- WebService的讲解 和 CXF 的初步使用
- [JZOJ5984] 仙人掌
- oracle备份恢复之recover database的四条语句区别
- curl_init 接口
- 代码高亮 highlightjs 使用文档
- k-means聚类算法C++实现
- 【nginx】一台nginx服务器多域名配置
- SSH框架整合中Hibernate实现Dao层常用结构
热门文章
- C++开发工程师面试题库 200~250道
- Codeforces Round #421 (Div. 2)D - Mister B and PR Shifts(模拟)
- python __builtins__ int类 (36)
- Codeforces731D 80-th Level Archeology
- Apereo CAS Server服务端搭建教程
- SOA架构设计和相关案例分析
- Vue-CLI3详解
- Mac上搭建直播服务器Nginx+rtmp,实现手机推流、拉流
- HDFS Java API
- 18.3.2从Class上获取信息(构造器)