题目链接: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 因式分解的更多相关文章

  1. codeforces Upgrading Array

    思路:对于每个数分解质因子然后记录每一个质因子的个数,对与在b中出现的质因子就减去1,否则加1,求出总的,然后从后面一次对它们的最大公约数,然后判断除以最大公约数之后,改变量是不是变化,求最大值,变化 ...

  2. Codeforces 494D Upgrading Array

    http://codeforces.com/contest/494/problem/D 题意:给一个数组,和一个坏质数集合,可以无数次地让1到i这些所有数字除以他们的gcd,然后要求Σf(a[i])的 ...

  3. CF402D Upgrading Array

    原题链接 先用素数筛筛下素数,然后考虑贪心去操作. 先求前缀\(GCD\)(求到\(GCD\)为\(1\)就不用再往下求了),得到数组\(G[i]\),然后从后往前扫,如果\(f(G[i]) < ...

  4. 2018.10.27 codeforces402D. Upgrading Array(数论+贪心)

    传送门 唉我觉得这题数据范围1e5都能做啊... 居然只出了2000 考完听zxyzxyzxy说我的贪心可以卡但过了? 可能今天本来是0+10+00+10+00+10+0只是运气好T1T1T1骗了10 ...

  5. 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( ...

  6. Codeforces 402D Upgrading Array:贪心 + 数学

    题目链接:http://codeforces.com/problemset/problem/402/D 题意: 给你一个长度为n的数列a[i],又给出了m个“坏质数”b[i]. 定义函数f(s),其中 ...

  7. 【Henu ACM Round#17 F】Upgrading Array

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果我们对某一个位置i操作两次的话. 显然结果就和操作一次一样. 因为第一次操作过后1..i这些数字就变成是互质的了. gcd为1. ...

  8. codeforces 402 D. Upgrading Array(数论+贪心)

    题目链接:http://codeforces.com/contest/402/problem/D 题意:给出一个a串和素数串b .f(1) = 0; p为s的最小素因子如果p不属于b , 否则 . a ...

  9. CF402D 【Upgrading Array】

    题目链接: CF402D 题目分析: 首先考虑一下怎么求每个数的分数.把每个数分解到最后会发现它的坏质因子对它分数的贡献是\(-1\),好质因子对它分数的贡献是\(1\),那么最后的分数就是好质因数- ...

随机推荐

  1. hive 中的Sort By、 Order By、Cluster By、Distribute By 区别

    Order by: order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间.在hive ...

  2. 日志分析-Web

    http://my.oschina.net/chenguang/blog/376267 http://my.oschina.net/chenguang/blog/371275 http://my.os ...

  3. android 发送自定义广播以及接收自定义广播

    发送自定义广播程序: 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  4. char 与 unsigned char的本质区别

    在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同 ...

  5. [codility]PrefixMaxProduct

    Codility Certificate题目.求product最大值,product为长度*出现次数,例子"abababa"如下: "a", whose pro ...

  6. JAVA与C++的区别和联系

    这篇总结的貌似不错: http://wenku.baidu.com/link?url=VixkWGl0BzUkmceaDJnQeUhzKEIex6poGaKKvMTP87P8a7HTmS5uIi87I ...

  7. xcode5编译过的xib 如何在xcode4.6下打开

    IOS7一出来,对应的xcode版本变成了5了,这次xcode升级比较大,特别是在源代码编译方面,苹果下足了功夫,编译时间不到原来的一半,忽然强烈觉得android在这方面需要加强啊: 其他不多说,X ...

  8. Linux内存初始化

    start_kernel -> setup_arch 在这个函数中我们主要看这几个函数. machine_specific_memory_setup max_low_pfn = setup_me ...

  9. USACO3.23Spinning Wheels

    直接枚举角度 数据比较水吧 /* ID: shangca2 LANG: C++ TASK: spin */ #include <iostream> #include<cstdio&g ...

  10. 在eclipse里卸载已安装的插件[例如Android Development Tools ADT]

    在eclipse里卸载已安装的插件                                        有四种方法: 1.到plugins和features目录中找到你要卸载的插件的文件夹, ...