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\),那么最后的分数就是好质因数- ...
随机推荐
- button的相关属性
设置自定义按钮的文字大小 [submit.titleLabel setFont:[UIFont boldSystemFontOfSize:16]]; 设置按钮选中状态的颜色 [btn setTintC ...
- struts2 查 找总结
0:38 2013/5/25 查 找 * * |-_-查找全部 Action层的home方法中的查找方法创建时不需要带个查找对象的参数 service层不用组织条件 dao层一条查询所有的hql语句S ...
- 微软Hololens学院教程-Hologram 211-Gestures(手势)【微软教程已经更新,本文是老版本】
这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...
- 再eclipse的javaweb项目中添加JQuery文件时jquery-2.1.4.min.js报错
解决方法: eclipse导入jquery包后报错,下面有个不错的解决方法,需要的朋友可以参考下 eclipse导入jquery包后报错,处理步骤如下: 1.打开项目.project文件,去掉如下内容 ...
- unity 导出 android安装包配置方案
原地址:http://blog.csdn.net/u012085988/article/details/17393111 1.jdk本人安装的是win32版的(虽然系统是64位的.但听说装64位的导出 ...
- 网络编程(二)NSURLSessionConfiguration
1.NSURLSession有三种工作模式 (1)defaultSessionConfiguration(默认):使用的是基于磁盘缓存的持久化策略,Cache,Cookie. (2)ephemeral ...
- 如何忽略usb host 模式设备连接确认对话框
<li class="alt"><span><span>package android.hardware.usb; </span> ...
- PHP remove,empty和detach区别
empty: 把所有段落的子元素(包括文本节点)删除 HTML 代码: <p>Hello, <span>Person</span> <a href=" ...
- java代码转换为c# 工具
Demo Java to C# Converter.exe 已下载到 F:\SoftWare-new\java\Java_to_CSharp_Converter.rar
- 【HDOJ】1018 Big Number
数学题,还是使用log避免大数,但是不要忘记需要+1,因为0也是1位,log(100)= 2,但却是3位. #include <stdio.h> #include <math.h&g ...