数论,质因数,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 ...
随机推荐
- DNS隧道--dnscat2
安装 服务端 git clone https://github.com/iagox86/dnscat2.git cd dnscat2 cd server sudo gem install bundle ...
- [01]APUE:sysconf / pathconf
sysconf / pathconf:用于运行时确定特定系统实际支持的限制值 sysconf 函数的参数格式: “_SC_ + 限制项名称”,如:CHILD_MAX 限制值指每个实际用户 ID 可以启 ...
- Linux环境下Jmeter 报错:Unable to get local host IP address
主要是没有在host中配置本机ip hostname查看本机名 [root@test task]# hostname test [root@test task]# 打开 [root@test task ...
- springboot + ajax + mybatis 实现批量删除
实现思路: 1. checkbox全选获取批量删除的id数组 2. ajax以字符串的形式将id数组传给控制器 3. 控制器将字符串分割成List数组作为参数传给mapper 具体代码: 1. 前端代 ...
- Spark三种部署方式
- c++11 Thread库写多线程程序
一个简单的使用线程的Demo c++11提供了一个新的头文件<thread>提供了对线程函数的支持的声明(其他数据保护相关的声明放在其他的头文件中,暂时先从thread头文件入手吧),写一 ...
- php数组的快速排序
function quick($array){ if(count($array)<=1){ return $array; } $key=$array[0]; $right=array(); $l ...
- JQUERY(入口函数 选择器)
入口函数 $(document).ready(function(){ });可以简写为$(function(){}) 选择器 基本选择器 元素选择器 $("p") 所有 & ...
- 校园商铺-4店铺注册功能模块-5店铺注册之Service层的实现
1. 创建接口 ShopService.java package com.csj2018.o2o.service; import java.io.File; import com.csj2018.o2 ...
- JavaScript 对象与函数
对象参考手册 Array Boolean Date Math Number String RegExp Global 前言 在js中什么都是对象(包括函数). 函数是用来实现具体功能的代码,用一种方式 ...