CF_402D Upgrading Array 因式分解
题目链接:http://codeforces.com/problemset/problem/402/D
/**算法分析: */
#include<bits/stdc++.h>
#define MAXN 5005
#define MAXM 110000
#define PI acos(-1.0)
#define REP(i,n) for(int i=0; i<n; i++)
#define FOR(i,s,t) for(int i=s; i<=t; i++)
#define mem(a,b) memset(a,b,sizeof(a))
#define show(x) { cerr<<">>>"<<#x<<" = "<<x<<endl; }
#define showtwo(x,y) { cerr<<">>>"<<#x<<"="<<x<<" "<<#y<<" = "<<y<<endl; }
using namespace std; int prime[MAXM],prime_index;
int a[MAXN],gcd[MAXN];
int n,m;
set<int> badset;
map<int,int> vis; void get_prime()
{
prime_index = ;
bool flag[MAXM]; mem(flag,);
FOR(i,,MAXM-)
{
if(!flag[i])
{
prime[prime_index++] = i;
for(int j=i+i; j<MAXM; j+=i)
flag[j] = true;
}
}
} int F(int s)
{
int ret = ,rcd = s; //这个rcd十分重要,注意改变的数如果还要操作就需要记录
if(badset.count(s)) return -;
if(vis.find(s) != vis.end()) return vis[s];
//进行因式分解,一种预处理出质数,另一种直接sqrt(n);
/**
for(int i=0; i < prime_index && prime[i]*prime[i] <= s; i++)
{
int p = prime[i];
if(s % p == 0)
{
int isbad;
if(badset.count(p)) isbad = -1;
else isbad = 1;
while(s % p == 0) ret += isbad, s /= p;
}
}
*/
for(int i=; i*i <= s; i++)
{
int p = i;
if(s % p == )
{
int isbad;
if(badset.count(p)) isbad = -;
else isbad = ;
while(s % p == ) ret += isbad, s /= p;
}
} if(s != )
{
if(badset.count(s)) ret--;
else ret++;
}
return vis[rcd] = ret;
} int main()
{
// freopen("E:\\acm\\input.txt","r",stdin);
// get_prime();
cin>>n>>m;
FOR(i,,n) scanf("%d",&a[i]);
FOR(i,,m)
{
int tmp; scanf("%d",&tmp);
badset.insert(tmp);
}
int ans = ;
gcd[] = a[];
FOR(i,,n)
{
ans += F(a[i]);
gcd[i] = __gcd(gcd[i-],a[i]);
} int decr = ;
for(int i=n; i>=; i--)
{
int cur_f = F(gcd[i]) + decr;
if(cur_f < )
{
ans -= cur_f * i;
decr -= cur_f;
}
}
cout<<ans<<endl;
}
CF_402D Upgrading Array 因式分解的更多相关文章
- codeforces Upgrading Array
思路:对于每个数分解质因子然后记录每一个质因子的个数,对与在b中出现的质因子就减去1,否则加1,求出总的,然后从后面一次对它们的最大公约数,然后判断除以最大公约数之后,改变量是不是变化,求最大值,变化 ...
- Codeforces 494D Upgrading Array
http://codeforces.com/contest/494/problem/D 题意:给一个数组,和一个坏质数集合,可以无数次地让1到i这些所有数字除以他们的gcd,然后要求Σf(a[i])的 ...
- CF402D Upgrading Array
原题链接 先用素数筛筛下素数,然后考虑贪心去操作. 先求前缀\(GCD\)(求到\(GCD\)为\(1\)就不用再往下求了),得到数组\(G[i]\),然后从后往前扫,如果\(f(G[i]) < ...
- 2018.10.27 codeforces402D. Upgrading Array(数论+贪心)
传送门 唉我觉得这题数据范围1e5都能做啊... 居然只出了2000 考完听zxyzxyzxy说我的贪心可以卡但过了? 可能今天本来是0+10+00+10+00+10+0只是运气好T1T1T1骗了10 ...
- CodeForces 402D Upgrading Array (数学+DP)
题意:给出一个数列,可以进行一种操作将某一个前缀除去他们的gcd,有一个函数f(x),f(1) = 0 , f(x) = f(x/p)+1,f(x) = f(x/p)-1(p是坏素数), 求 sum( ...
- Codeforces 402D Upgrading Array:贪心 + 数学
题目链接:http://codeforces.com/problemset/problem/402/D 题意: 给你一个长度为n的数列a[i],又给出了m个“坏质数”b[i]. 定义函数f(s),其中 ...
- 【Henu ACM Round#17 F】Upgrading Array
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果我们对某一个位置i操作两次的话. 显然结果就和操作一次一样. 因为第一次操作过后1..i这些数字就变成是互质的了. gcd为1. ...
- codeforces 402 D. Upgrading Array(数论+贪心)
题目链接:http://codeforces.com/contest/402/problem/D 题意:给出一个a串和素数串b .f(1) = 0; p为s的最小素因子如果p不属于b , 否则 . a ...
- CF402D 【Upgrading Array】
题目链接: CF402D 题目分析: 首先考虑一下怎么求每个数的分数.把每个数分解到最后会发现它的坏质因子对它分数的贡献是\(-1\),好质因子对它分数的贡献是\(1\),那么最后的分数就是好质因数- ...
随机推荐
- display:inline-block的深入理解
在使用 CSS 实现表现的时候,会经常接触到 display:inline-block 这一属性,无论是 初接触 Web 标准还是接触标准已久的朋友,大都会对这一属性感觉很迷惑和模糊. display ...
- python的split用法
Python中没有字符类型的说法,只有字符串,这里所说的字符就是只包含一个字符的字符串!!!这里这样写的原因只是为了方便理解,仅此而已. 1. 按照某一个分隔符分割一个字符串: >>> ...
- Bash Promot
http://www.askapache.com/linux/bash-power-prompt.html 强大的Bash Promt命令 http://bbs.51cto.com/thread-11 ...
- RichEdit 各个版本介绍
RichEdit是开发中经常使用到的控件,其版本自1.0起,历经好几年,好几次的更新,在此引用一篇介绍RichEdit版本的博文(http://blogs.msdn.com/b/murrays/arc ...
- libvlc 双击,鼠标事件消息响应
基于vlc 2.1 动态库实现接收双击消息的接收,使双击vlc播放画面可以全屏显示. 需要其他版本的vlc可以与我联系(有偿进行修改) 下载地址:http://download.csdn.net/de ...
- Java金字塔及变形
Java金字塔 package com.tfj.test; public class JinZiTa { public static void main(String[] args){ int num ...
- Heartbeat+DRBD+NFS 构建高可用的文件系统
1.实验拓扑图 2.修改主机名 1 2 3 vim /etc/sysconfig/network vim /etc/hosts drbd1.free.com drbd2.free.com 3. ...
- hdu4648Magic Pen 6
http://acm.hdu.edu.cn/showproblem.php?pid=4648 求连续的一段和对m取余为0 若s[j]和s[i]对M的余数都相同 则相见就满足要求 找个最长的 #inc ...
- layer父页面刷新
$.ajax({ type:"POST", url:"{sh::U('Address/edit')}", data: $("#saveform&quo ...
- bzoj2506
不知道该给这题贴什么标签了,但是这是一道好题1.注意这道题的询问是满足区间减法的,我们可以把一个询问拆成两个询问离线搞搞,这个思想在后面会见到2.分类的思想,这道题的求相同余数看似很烦,实际上我们发现 ...