【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取模之后的 ... 
随机推荐
- java使用simpleDateFormat格式化日期 时间
			时间日期标识符: yyyy:年 MM:月 dd:日 hh:1~12小时制(1-12) HH:24小时制(0-23) mm:分 ss:秒 S:毫秒 E:星期几 D:一年中的第几天 F:一月中的第几个星期 ... 
- 【Explain】mysql之explain详解(分析索引的最佳使用)
			在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain 这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句 ... 
- ThinkPHP的运行流程-1
			我在index\Lib\Action\目录下新建了一个ShowAction.class.php文件.ps:该目录是控制器的目录. 然后这个文件中继承了action这个类.代码如下: 1 2 3 4 5 ... 
- Linux端口占用
			1.netstat netstat -anp | grep 23232 Sample: [root@BICServer 0825]# netstat -anp | grep 23232 tcp 0 0 ... 
- LCD之mipi DSI接口驱动调试流程【转】
			转自:http://blog.csdn.net/liwei16611/article/details/68146912 1.LCD MIPI DSI协议 MIPI-DSI是一种应用于显示技术的串行接口 ... 
- dpkg的用法 (转)
			dpkg是一个Debian的一个命令行工具,它可以用来安装.删除.构建和管理Debian的软件包. 下面是它的一些命令解释: 1)安装软件 命令行:dpkg -i <.deb file name ... 
- React 16 源码瞎几把解读 【二】 react组件的解析过程
			一.一个真正的react组件编译后长啥样? 我们瞎几把解读了react 虚拟dom对象是怎么生成的,生成了一个什么样的解构.一个react组件不光由若干个这些嵌套的虚拟dom对象组成,还包括各种生命周 ... 
- 【51nod1006】simple KMP
			原题意看的挺迷糊的,后来看了http://blog.csdn.net/YxuanwKeith/article/details/52351335大爷的题意感觉清楚的多…… 做法也非常显然了,用树剖维护后 ... 
- HDU 5936 朋友
			题意为给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根. 当一方操作时,他们需要先选择一个不为根的点,满足该点到其父亲的边权为1; 然后 ... 
- 手机页面或是APP中减少使用setTimeout和setInterval,因为他们会导致页面卡顿
			1.setTimeout致使页面的卡顿或是不流畅,打乱模块的生命周期 ,还有setTimeout其实是很难调试的. 当一个页面有众多js代码的时候,setTimeout就是导致页面的卡顿. var s ... 
