【20181027T1】洛阳怀【推结论+线性筛+分解质因数+GCD性质】
【错解】
唔,先打个表看看
咦,没有坏质数好像就是质因数个数啊
那有坏质数呢?
好像变负数了
推出错误结论:f(x)=x的质因数个数,如果有个坏质数,就乘上-1
然后乱搞,起码花了2个小时
【正解】
用脚趾头想一想都知道怎么可能长这样的?
如果最小质因数是坏的,就去掉-1;否则去掉+1
即好质因数-坏质因数
开个bitset记坏质数,然后先筛一下,计算的时候分解\(\sqrt{1e9}\)质因数就好
对于GCD:因为g[i]%g[i+1]==0,所以后面的操作对前面没有影响
所以预处理前缀GCD,然后从后往前算f,如果<0就除一下
另外:分解质因数应先筛出质数,然后枚举\(\sqrt{X}\)内的质数,一个个分解,最后如果X不为1再把自己加上
复杂度\(O(\sqrt{max(A_i)}+\frac{N\sqrt{N}}{log \sqrt{N}})\)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <bitset>
#define MAXN 2005
#define MAX 1000000
using namespace std;
typedef long long ll;
bitset<1000000005> S;
inline int read()
{
int ans=0,f=1;
char c=getchar();
while (!isdigit(c))
{
if (c=='-') f=-1;
c=getchar();
}
while (isdigit(c))
ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return f*ans;
}
int n,m;
bool np[MAX+5];
int pl[MAX+5],cnt;
void init()
{
np[1]=1;
for (int i=2;i<=MAX;i++)
{
if (!np[i])
pl[++cnt]=i;
for (int j=1;j<=cnt&&i*pl[j]<=MAX;j++)
{
np[i*pl[j]]=1;
if (i%pl[j]==0) break;
}
}
}
int calc(int x)
{
if (x==1) return 0;
int ans=0;
bool flag=false;
for (int i=1;i<=cnt&&pl[i]*pl[i]<=x;i++)
while (x%pl[i]==0)
{
ans+=(S[pl[i]]? -1:1);
x/=pl[i];
}
if(x!=1)ans+=(S[x]? -1:1);
return ans;
}
int a[MAXN],b[MAXN];
int gcd(int a,int b)
{
return b? gcd(b,a%b):a;
}
int g[MAXN];
int main()
{
n=read(),m=read();
for (int i=1;i<=n;i++) a[i]=read();
for (int i=1;i<=m;i++) S[read()]=1;
init();
for (int i=1;i<=n;i++) g[i]=gcd(g[i-1],a[i]);
ll ans=0;
for (int i=1;i<=n;i++) ans+=calc(a[i]);
int lazy=1;
for (int i=n;i>=1;i--)
{
g[i]/=lazy;
int t=calc(g[i]);
if (t<0)
{
ans-=(ll)t*i;
lazy*=g[i];
}
}
cout<<ans;
return 0;
}
【20181027T1】洛阳怀【推结论+线性筛+分解质因数+GCD性质】的更多相关文章
- Codeforces 893E Counting Arrays:dp + 线性筛 + 分解质因数 + 组合数结论
题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6 ...
- Gym 101981J - Prime Game - [数学题][线性筛+分解质因数][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem J]
题目链接:http://codeforces.com/gym/101981/attachments 题意: 令 $mul(l,r) = \prod_{i=l}^{r}a_i$,且 $fac(l,r)$ ...
- 【数论】【枚举】【莫比乌斯反演】【线性筛】bzoj2818 Gcd
思路是hdu6134的简化版,只需要在外面套上一个枚举素数就行了. http://www.cnblogs.com/autsky-jadek/p/7491730.html #include<cst ...
- 欧拉筛,线性筛,洛谷P2158仪仗队
题目 首先我们先把题目分析一下. emmmm,这应该是一个找规律,应该可以打表,然后我们再分析一下图片,发现如果这个点可以被看到,那它的横坐标和纵坐标应该互质,而互质的条件就是它的横坐标和纵坐标的最大 ...
- 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛
4514: [Sdoi2016]数字配对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 726 Solved: 309[Submit][Status ...
- BZOJ-2186 沙拉公主的困惑 线性筛(筛筛筛)+线性推逆元
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2417 Solved: 803 [Submit][St ...
- luogu 3708 koishi的数学题 递推 线性筛
题目链接 题意 输入一个整数\(n\)\((n\leq 1e6)\),设\(f(x)=\sum_{i=1}^n x\mod i\),你需要输出\(f(1),f(2)...,f(n)\). 输入输出格式 ...
- * SPOJ PGCD Primes in GCD Table (需要自己推线性筛函数,好题)
题目大意: 给定n,m,求有多少组(a,b) 0<a<=n , 0<b<=m , 使得gcd(a,b)= p , p是一个素数 这里本来利用枚举一个个素数,然后利用莫比乌斯反演 ...
- 济南学习D3T1__线性筛和阶乘质因数分解
[问题描述] 从1− N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字N. [输出格式] 一行,一个整数代表答案对100000007取模之后的 ...
随机推荐
- 基于canvas的图片编辑合成器
在我们日常的前端开发中,经常会要给服务器上传图片,但是局限很大,图片只能是已有的,假设我想把多张图片合成一张上传就需要借助图片编辑器了,但是现在我们有了canvas合成就简单多了 首先我们看图片编辑器 ...
- CRF++进行中文分词实例
工具包:https://taku910.github.io/crfpp/#tips 语料:http://sighan.cs.uchicago.edu/bakeoff2005/ 安装: 1)下载linu ...
- Linux SCIM/fcitx/ibus 输入法
现在很多发行版linux一般都是装好scim scim-tables-zh 重启就行 但有时重启后还是不能调用 可以用如下方法: 添加文件: sudo gedit /etc/X11/xinit/xin ...
- linux编程之main()函数启动过程【转】
转自:http://blog.csdn.net/gary_ygl/article/details/8506007 1 最简单的程序 1)编辑helloworld程序,$vim helloworld. ...
- host与guest间共享文件夹的三种方法(原创)
一,用samba实现host与guest共享文件 Samba简介:SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算 ...
- 【SSH项目实战】脚本密钥的批量分发与执行【转】
[TOC] 前言 <项目实战>系列为<linux实战教学笔记>第二阶段内容的同步教学配套实战练习,每个项目循序衔接最终将组成<Linux实战教学笔记>第二阶段核心教 ...
- mac下 mysql / nginx 问题总汇
"ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)&q ...
- python的scrapy框架
scrapy是python中数据抓取的框架.简单的逻辑如下所示 scrapy的结构如图所示,包括scrapy engine.scheduler.downloader.spider.item pipel ...
- hdu 1846(巴什博弈)
Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Next Permutation——简单、经典
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...