Codeforces 757B:Bash's Big Day(分解因子+Hash)

http://codeforces.com/problemset/problem/757/B

题意:给出n个数,求一个最大的集合并且这个集合中的元素gcd的结果不等于1。

思路:一开始把素数表打出来,发现有9k+个数,不能暴力枚举。发现O(sqrt(n)*n)似乎可行,就枚举因子,然后出现过的因子就在Hash[]加1,最后枚举素数表里的元素,找出现次数最多的,因为那些数都可以映射在素数表里面。注意最少的ans是1.

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <iostream>
 4 #include <cstring>
 5 #include <string>
 6 #include <cmath>
 7 #include <queue>
 8 #include <vector>
 9 #include <map>
10 #include <set>
11 #include <stack>
12 using namespace std;
13 #define INF 0x3f3f3f3f
14 #define N 100010
15 typedef long long LL;
16 int prime[N], num[N], cnt;
17 int Hash[N];
18
19 void biao() {
20     for(int i = 2; i <= 100000; i++) {
21         int tmp = sqrt(i); bool flag = 0;
22         for(int j = 2; j <= tmp; j++) {
23             if(i % j == 0) {
24                 flag = 1; break;
25             }
26         }
27         if(!flag) prime[++cnt] = i;
28     }
29 }
30
31 int main() {
32     biao();
33     int n;
34     scanf("%d", &n);
35     for(int i = 1; i <= n; i++) {
36         scanf("%d", &num[i]);
37         Hash[num[i]]++;
38         int tmp = sqrt(num[i]);
39         for(int j = 2; j <= tmp; j++) {
40             if(num[i] % j == 0) {
41                 Hash[j]++;
42                 if(j != num[i] / j) Hash[num[i] / j]++;
43             }
44         }
45     }
46     int ans = 1;
47     for(int i = 1; i <= cnt; i++) {
48         if(ans < Hash[prime[i]]) {
49             ans = Hash[prime[i]];
50         }
51     }
52     cout << ans << endl;
53     return 0;
54 }

Codeforces 757B:Bash's Big Day(分解因子+Hash)

时间: 2025-01-31 07:56:07

Codeforces 757B:Bash's Big Day(分解因子+Hash)的相关文章

uva 993 Product of digits (分解因子)

uva 993 Product of digits 题目大意:给定一个数N,要求出一个数,使得这个数的每一位相乘会等于N,且这个数的值最小. 解题思路:简单的分解因子.要注意的地方有两点:1) 因子从9开始向2遍历,可以保证位数最小: 2)当N等于1是最好特殊处理. #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std;

[Codeforces 757E] Bash Plays with Functions (数论)

题目链接: http://codeforces.com/contest/757/problem/E?csrf_token=f6c272cce871728ac1c239c34006ae90 题目: 题解: $f_0(n) = 2^{n的不同质因子的个数}$ $ f_r(n) = \sum_{d|n}f_{r-1}(d)$ $f_0$是积性函数 , $f_r = f_0 * Id^r (1) $也是积性函数 原文地址:https://www.cnblogs.com/xxzh/p/9532304.ht

Codeforces B. Mouse Hunt(强连通分解缩点)

题目描述: Mouse Hunt time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Medicine faculty of Berland State University has just finished their admission campaign. As usual, about 80%of applicants a

Codeforces 463E Caisa and Tree dfs+分解质因素

题目链接:点击打开链接 题意: 给了一棵树 每个点有点权 操作1 : 1 u 表示询问 gcd(Valueof(u), Valueof(v) ) != 1 的所有v 点中深度最大的点 [ v是 path(u, root); && v!=u ] 操作2 : 2 u w 修改点权 思路: 因为操作2的个数不超过50个,所以每次更新点权后都把所有答案预处理一遍.这样回答是O(1), 更新是n*logn*logn 每次在dfs中计算答案和更新素数栈,dfs完子树后就把这个点在栈里删掉,这样就能保证

hdu 5288 OO’s Sequence 分解因子

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5288 OO's Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 588    Accepted Submission(s): 209 Problem Description OO has got a array A of

hdu2588-GCD-(欧拉函数+分解因子)

The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b),is the largest divisor common to a and b,For example,(1,2)=1,(12,18)=6. (a,b) can be easily found by the Euclidean algorithm. Now Carp is considering a litt

Reverses CodeForces - 906E (最小回文分解)

题意: 给你两个串s和t,其中t是由s中选择若干个不相交的区间翻转得到的,现在要求求出最少的翻转次数以及给出方案. 1≤|s|=|t|≤500000 题解: 我们将两个字符串合成成T=s1t1s2t2...sntn T=s1t1s2t2...sntn 那么问题就是最少要把整个字符串T 拆分成若干个偶数长度(并且长度大于2)的回文串.长度是2的表示没有反转.然后就变成了最小回文分解模型 ,然后直接上板子. 最小回文分解 论文在此 1 #include <set> 2 #include <m

Light OJ 1318 Strange Game 组合数+快速幂+分解因子

长度为l的用k种字符组成的字符串有k^l中 其中m个字符要不相同 那就是k^l*C(l, m)*(k-1)^m 有重复 要除以2 但是你mod n了 不能直接除 n不一定是素数 所以不能乘以逆元 所以我都mod 2倍的n 最后的结果再除以2 特判l = 1 和 m = 0的情况 #include <cstdio> #include <cstring> #include <cmath> using namespace std; typedef long long LL;

Light OJ 1318 Strange Game 组合数+高速幂+分解因子

长度为l的用k种字符组成的字符串有k^l中 当中m个字符要不同样 那就是k^l*C(l, m)*(k-1)^m 有反复 要除以2 可是你mod n了 不能直接除 n不一定是素数 所以不能乘以逆元 所以我都mod 2倍的n 最后的结果再除以2 特判l = 1 和 m = 0的情况 #include <cstdio> #include <cstring> #include <cmath> using namespace std; typedef long long LL;