数论,质因数,gcd——cf1033D 好题!
直接筛质数肯定是不行的
用map<ll,ll>来保存质因子的指数
考虑只有3-5个因子的数的组成情况
必定是a=pq or a=p*p or a=p*p*p or a=p*p*p*p
先用二分判后面三种情况
然后判第一种情况
由于不知道pq,而且无法直接求,我们间接用 d=gcd(a[i],a[j]) 来求
如果1<d<a[i],那么a[i]两个因数就可以确定是d,a[i]/d
反之a[i]两个因数未出现过,pq直接计算到贡献里去
但是可能有和a[i]相等的数,所以我们不先计算这样pq的数量,而是另外开一个map<ll,ll>来计算像a[i]这样的不能直接求出因子的数及其个数
然后求答案时再和另一个map分开统计,相乘
#include<bits/stdc++.h>
#include<map>
using namespace std;
#define ll long long
#define mod 998244353
map<ll,ll>mp;
map<ll,ll>::iterator it;
int n,tot;
ll a[];
ll calc4(ll x){
ll l=,r=,mid;
while(l<=r){
mid=l+r>>;
ll t=mid*mid*mid*mid;
if(t==x)return mid;
else if(t>x)r=mid-;
else l=mid+;
}
return -;
}
ll calc3(ll x){
ll l=,r=,mid;
while(l<=r){
mid=l+r>>;
ll t=mid*mid*mid;
if(t==x)return mid;
else if(t>x)r=mid-;
else l=mid+;
}
return -;
}
ll calc2(ll x){
ll l=,r=,mid;
while(l<=r){
mid=l+r>>;
ll t=mid*mid;
if(t==x)return mid;
else if(t>x)r=mid-;
else l=mid+;
}
return -;
}
map<ll,ll>has;
int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
for(int i=;i<=n;i++){
ll p=calc4(a[i]);
if(p!=-){mp[p]+=;continue;}
p=calc3(a[i]);
if(p!=-){mp[p]+=;continue;}
p=calc2(a[i]);
if(p!=-){mp[p]+=;continue;} int flag=;
for(int j=;j<=n;j++){//找p
if(i==j)continue;
ll d=__gcd(a[i],a[j]);
if(d!= && d!=a[j]){
mp[d]++;mp[a[i]/d]++;
flag=;break;
}
}
if(flag==)has[a[i]]++;//找不到p,就把a[i]存下来
}
ll ans=;
for(it=has.begin();it!=has.end();it++){//计算第二个map的贡献
ans=ans*(it->second+)%mod*(it->second+)%mod;
}
for(it=mp.begin();it!=mp.end();it++){//计算第一个map的贡献
ans=ans*(it->second+)%mod;
}
cout<<ans<<endl;
}
数论,质因数,gcd——cf1033D 好题!的更多相关文章
- 数论-质因数(gcd) UVa 10791 - Minimum Sum LCM
https://vjudge.net/problem/UVA-10791/origin 以上为题目来源Google翻译得到的题意: 一组整数的LCM(最小公倍数)定义为最小数,即 该集合的所有整数的倍 ...
- HDU1695:GCD(容斥原理+欧拉函数+质因数分解)好题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题目解析: Given 5 integers: a, b, c, d, k, you're to ...
- 【20181027T1】洛阳怀【推结论+线性筛+分解质因数+GCD性质】
原题:CF402D [错解] 唔,先打个表看看 咦,没有坏质数好像就是质因数个数啊 那有坏质数呢? 好像变负数了 推出错误结论:f(x)=x的质因数个数,如果有个坏质数,就乘上-1 然后乱搞,起码花了 ...
- 数论 - 欧拉函数模板题 --- poj 2407 : Relatives
Relatives Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11372 Accepted: 5544 Descri ...
- (转载)关于gcd的8题
发现其实有关gcd的题目还是挺多的,这里根据做题顺序写出8题. [bzoj2818: Gcd] gcd(x,y)=质数, 1<=x,y<=n的对数 做这题的时候,懂得了一个非常重要的转化: ...
- 数论3——gcd&&lcm
gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm ( gcd就是gcd(a, b), ( •̀∀•́ ) ...
- 【POJ 1845】Sumdiv——数论 质因数 + 分治 + 快速幂
(题面来自luogu) 题目描述 输入两个正整数a和b,求a^b的所有因子之和.结果太大,只要输出它对9901的余数. 输入格式 仅一行,为两个正整数a和b(0≤a,b≤50000000). 输出格式 ...
- 【poj 2407】Relatives(数论--欧拉函数 模版题)
题意就是求10^9以内的正整数的欧拉函数(Φ(n)表示<=n的与n互质的正整数个数). 解法:用欧拉筛和欧拉函数的一些性质: 1.若p是质数,Φ(p)=p-1: 2.欧拉函数是积性函 ...
- HDU3988-Harry Potter and the Hide Story(数论-质因数分解)
Harry Potter and the Hide Story Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 ...
随机推荐
- ASP.NET MVC Controller激活系统详解2
一.引言 此篇博文紧接上篇博文进行阐述,本篇博文阐述的主题是Controller激活和url路由 二.总述 ASP.NET路由系统是HTTP请求抵达服务端的第一道屏障,它根据注册的路由规则对拦截的请求 ...
- 2015ACM/ICPC亚洲区沈阳站重现赛-HDU5512-Pagodas-gcd
n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, l ...
- java-day15
File类 文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作 静态成员 static String pathSeparator 路径分隔符 File.pathSeparator ...
- 28-Ubuntu-远程管理命令-02-查看网卡的配置信息
命令 功能 ifconfig 查看网卡配置信息 ifconfig | grep inet 查看网卡对应的IP地址 ping 127.0.0.1 检测本地网卡是否正常 ping IP地址 检测到目标 ...
- Southeastern European Regional Programming Contest 2019
easy: I medium-easy: BDEGJ medium: F medium-hard: A A. B. 按 x 排序,\(dp[i][j][k]\) 表示考虑前 \(i\) 个物品,lev ...
- Spring注解基础学习总结
1.依赖注入注解: @Component:Bean注入到Spring容器组件(通用) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE):Bean作用域( ...
- xx市xx项目运维工作方案
注:提供给各位正在做项目,或准备做项目的朋友,仅供参考,用于后期运维提供的方案模板.仅供参考. 因为直接从word复制,会有一些排版的问题.可以留邮箱. xx市xx项目运维工作方案 xx有限公司 20 ...
- React和vue的差异和相似地方
React 单向绑定(加插件后,还是可以双向绑定) Vue 双向绑定 组件化 1. React,需要编写render函数, 2. 当React状态的状态state改变是render就会重新被调用, 重 ...
- C#让两个长度相同的数组一一对应
比如: string a[]={"x","y","z"} "} 用字典使其一一对应 Dictionary<string, s ...
- python日常使用
os.path.splitext('C:\py\wxPython.gif') 得到扩展名的函数 os.remove(删除文件) os.listdir(显示该目录下的文件) os.getcwd(获取当 ...