原题: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;
}

转载于:https://www.cnblogs.com/lstoi/p/9862184.html

【20181027T1】洛阳怀【推结论+线性筛+分解质因数+GCD性质】相关推荐

  1. 【BZOJ3823】【East!模拟赛_Round5T1】定情信物 推公式+线性筛逆元(推公式法比出题人简)

    题解1: 我们定义点为0维元素.线为1维元素.面为2维元素-- 既然一个低维超方体在对应新轴上平移得到高一维的超方体,比如二维超方体为一个面,然后沿新出现的z轴拓展,那么一个低维元素就会增加一维变成高 ...

  2. 使用线性筛进行质因数分解

    质因数分解 质因数分解的概念 一个数A=p1k1⋅p2k2⋅⋅⋅pnkn,其中pi为质数恒成立一个数A=p_1^{k_1} \cdot p_2^{k_2} \cdot \cdot \cdot p_n^ ...

  3. 牛客3007E-立方数-欧拉线性筛+素数分解+二分

    链接:https://ac.nowcoder.com/acm/contest/3007/E 来源:牛客网 题目描述: 对于给定的正整数 N,求最大的正整数 A,使得存在正整数 B,满足 A3B=N 输 ...

  4. 洛谷P2257 YY的GCD 莫比乌斯函数反演+线性筛

    洛谷P2257 YY的GCD 标签 莫比乌斯反演 线性筛 前言 这题貌似和莫反没多大关系,就是用到了一个莫比乌斯函数的性质了,其他就是推公式,优化和式. 我的第一道懵逼反演-真的好难好难-而且套路特别 ...

  5. 【bzoj2693】jzptab 莫比乌斯反演+线性筛

    题目描述 输入 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M 输出 T行 每行一个整数 表示第i组数据的结果 样例输入 1 4 5 样例输出 122 题解 莫比乌斯反演+线性筛 由 ...

  6. bzoj2186,P2155-[SDOI2008]沙拉公主的困惑【线性筛,欧拉函数,逆元】

    正题 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2186 https://www.luogu.org/problem/P2155 题 ...

  7. 积性函数的性质及证明 + 线性筛

    引言 在数论问题中,积性函数有着广泛的应用. 如在莫比乌斯反演问题中,函数变换之后如何快速维护前缀和往往是最重要也是最难的一步.如果维护的函数具有积性,那就可以尝试利用线性筛在O(n)O(n)O(n) ...

  8. 【数学知识】三种方法求 [1,n] 中所有数欧拉函数(线性筛欧拉函数优化至 O(n) )

    整理的算法模板合集: ACM模板 ①直接求小于或等于n,且与n互质的数个数(求[1,n]中所有数的欧拉函数时间复杂度:O(nn)O(n\sqrt{n})O(nn​)) ②求[1,n]之间每个数的质因数 ...

  9. 【数学专题】 筛质数、分解质因数和快速幂

    筛质数 质数筛法分为埃氏筛和线性筛. 埃氏筛没有线性筛时间复杂度好,不常用,但是他的时间复杂度分析方法却比较常用. 埃氏筛的时间复杂度为O(nloglogn)≈O(n)O(nloglogn)≈O(n) ...

最新文章

  1. ecos 编译时无法找到 tclConfig.sh 和 tkConfig.sh
  2. 系统学习机器学习之监督学习
  3. Android用shareUserID实现多个Activity显示在同一界面
  4. 信息系统项目管理知识--知识产权与标准化
  5. jquerymobile从index.html跳转到另外一个xxxx.html文件,js不执行的解决
  6. ios markdown 解析_Shortcuts 教程:正则表达式修改 Markdown 链接
  7. python学习教程(链接)
  8. EF另一个 SqlParameterCollection 中已包含 SqlParameter。
  9. 【解决bug之路】JAVA 之 static
  10. 关于linux kernel编译的几项关键点:
  11. 别的AI还在打游戏,这个AI已经当上“超级马里奥”游戏策划了|GECCO最佳论文
  12. 浅析ASP.NET 2.0的用户密码加密机制
  13. 如何装系统,如何装kali linux系统
  14. Android架构师之路-oop
  15. 编写程序 - 打印购物小票.
  16. elasticsearch7.5.0 集群搭建
  17. 常用工具 [ubuntu 图像编辑软件]
  18. 《领导沟通艺术与真实影响力》感想一
  19. mysql 全局锁_Mysql全局锁和表级锁
  20. Druid middleManager如何获取task信息并启动Peon进程

热门文章

  1. 基于web的HMI / SCADA软件
  2. 1972年Dijkstra的图灵奖演讲:谦逊的程序员
  3. android 联通时间同步,NTP时间同步技术在中国联通信息化中的应用
  4. [转载]2017 中国电信(美洲)公司CTExcel US电话卡使用攻略_拔剑-浆糊的传说_新浪博客
  5. 《红楼梦》金陵十二钗判词及赏析
  6. “中国天眼”观测到宇宙极端爆炸起源证据
  7. 医院电子病历系统信息安全解决方案
  8. 电脑开不了机,电脑开不了机是什么原因
  9. 南通青鸟第一天学习心得
  10. 计算机毕业设计Java校园面包超市系统(源码+系统+mysql数据库+Lw文档)