原题:CF402D

【错解】

唔,先打个表看看

咦,没有坏质数好像就是质因数个数啊

那有坏质数呢?

好像变负数了

推出错误结论: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性质】的更多相关文章

  1. Codeforces 893E Counting Arrays:dp + 线性筛 + 分解质因数 + 组合数结论

    题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6 ...

  2. 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)$ ...

  3. 【数论】【枚举】【莫比乌斯反演】【线性筛】bzoj2818 Gcd

    思路是hdu6134的简化版,只需要在外面套上一个枚举素数就行了. http://www.cnblogs.com/autsky-jadek/p/7491730.html #include<cst ...

  4. 欧拉筛,线性筛,洛谷P2158仪仗队

    题目 首先我们先把题目分析一下. emmmm,这应该是一个找规律,应该可以打表,然后我们再分析一下图片,发现如果这个点可以被看到,那它的横坐标和纵坐标应该互质,而互质的条件就是它的横坐标和纵坐标的最大 ...

  5. 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛

    4514: [Sdoi2016]数字配对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 726  Solved: 309[Submit][Status ...

  6. BZOJ-2186 沙拉公主的困惑 线性筛(筛筛筛)+线性推逆元

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2417 Solved: 803 [Submit][St ...

  7. luogu 3708 koishi的数学题 递推 线性筛

    题目链接 题意 输入一个整数\(n\)\((n\leq 1e6)\),设\(f(x)=\sum_{i=1}^n x\mod i\),你需要输出\(f(1),f(2)...,f(n)\). 输入输出格式 ...

  8. * SPOJ PGCD Primes in GCD Table (需要自己推线性筛函数,好题)

    题目大意: 给定n,m,求有多少组(a,b) 0<a<=n , 0<b<=m , 使得gcd(a,b)= p , p是一个素数 这里本来利用枚举一个个素数,然后利用莫比乌斯反演 ...

  9. 济南学习D3T1__线性筛和阶乘质因数分解

    [问题描述] 从1− N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字N. [输出格式] 一行,一个整数代表答案对100000007取模之后的 ...

随机推荐

  1. $this->success()传值不完整

    public function manager_doExport() { $search=$_POST['search']; //前台输入2017-12-1,即,$search['starttime' ...

  2. Tomcat面试题目

    1.tomcat给你你怎样去调优? 1. JVM参数调优:-Xms<size> 表示JVM初始化堆的大小,-Xmx<size>表示JVM堆的最大值.这两个值的大小一般根据需要进 ...

  3. CodeForces - 999C

    You are given a string ss consisting of nn lowercase Latin letters. Polycarp wants to remove exactly ...

  4. C语言与汇编语言对照分析

    游戏通常会包含各种各样的功能,如战斗系统.UI渲染.经济系统.生产系统等,每个系统又包含各式各样子功能,如伤害判定.施法.使用道具.角色移动.玩家之间交易等等.这些游戏功能在代码实现中往往少不了条件判 ...

  5. 工作中常用的Git操作--------(一)

    今天主要记录一下平常工作当中使用的git操作: 1.git的安装这里省略: 2.git的操作指令: 在项目开发中,经常是拉去经理已经搭建好的一个项目,也就是给我们一个git地址.比如:http://g ...

  6. php上传文件大小限制的方法详解

    打开php.ini,首先找到file_uploads = on ;是否允许通过HTTP上传文件的开关.默认为ON即是开upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就 ...

  7. OGG生成数据定义文件的参数NOEXTATTR

    ./defgen paramfile ./dirprm/jzjj.prm NOEXTATTR In OGG 11.2, there is a new parameter NOEXTATTR. This ...

  8. 33 - 并发编程-线程同步-Event-lock

    目录 1 线程同步 1.1 Event 1.1.1 什么是Flag? 1.1.2 Event原理 1.1.3 吃包子 1.2 Lock 1.2.1 lock方法 1.2.2 计数器 1.2.3 非阻塞 ...

  9. 【读书笔记::深入理解linux内核】内存寻址

    我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...

  10. 浅析busybox如何集成到openwrt

    背景 近日添加了一个包到openwrt中,在此过程中又对openwrt多了一些认识 这个包本身自带了kconfig,可直接在这个包里面执行make menuconfig进行配置,然后执行make 但要 ...