原题: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. java使用simpleDateFormat格式化日期 时间

    时间日期标识符: yyyy:年 MM:月 dd:日 hh:1~12小时制(1-12) HH:24小时制(0-23) mm:分 ss:秒 S:毫秒 E:星期几 D:一年中的第几天 F:一月中的第几个星期 ...

  2. 【Explain】mysql之explain详解(分析索引的最佳使用)

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain 这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句 ...

  3. ThinkPHP的运行流程-1

    我在index\Lib\Action\目录下新建了一个ShowAction.class.php文件.ps:该目录是控制器的目录. 然后这个文件中继承了action这个类.代码如下: 1 2 3 4 5 ...

  4. Linux端口占用

    1.netstat netstat -anp | grep 23232 Sample: [root@BICServer 0825]# netstat -anp | grep 23232 tcp 0 0 ...

  5. LCD之mipi DSI接口驱动调试流程【转】

    转自:http://blog.csdn.net/liwei16611/article/details/68146912 1.LCD MIPI DSI协议 MIPI-DSI是一种应用于显示技术的串行接口 ...

  6. dpkg的用法 (转)

    dpkg是一个Debian的一个命令行工具,它可以用来安装.删除.构建和管理Debian的软件包. 下面是它的一些命令解释: 1)安装软件 命令行:dpkg -i <.deb file name ...

  7. React 16 源码瞎几把解读 【二】 react组件的解析过程

    一.一个真正的react组件编译后长啥样? 我们瞎几把解读了react 虚拟dom对象是怎么生成的,生成了一个什么样的解构.一个react组件不光由若干个这些嵌套的虚拟dom对象组成,还包括各种生命周 ...

  8. 【51nod1006】simple KMP

    原题意看的挺迷糊的,后来看了http://blog.csdn.net/YxuanwKeith/article/details/52351335大爷的题意感觉清楚的多…… 做法也非常显然了,用树剖维护后 ...

  9. HDU 5936 朋友

    题意为给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根. 当一方操作时,他们需要先选择一个不为根的点,满足该点到其父亲的边权为1; 然后 ...

  10. 手机页面或是APP中减少使用setTimeout和setInterval,因为他们会导致页面卡顿

    1.setTimeout致使页面的卡顿或是不流畅,打乱模块的生命周期 ,还有setTimeout其实是很难调试的. 当一个页面有众多js代码的时候,setTimeout就是导致页面的卡顿. var s ...