题目大意

求不大于 m 的、 质因数集与给定有n个元素的质数集有交集的自然数之和。

数据范围

1 2 3 n*m<=10^7
4 5 n<=2,m<=10^9
6 7 n<=20,m<=10^8
8 9 10 n<=20,m<=10^9

前三个点

n可能会很大。暴力枚举从1到m的每一个数看看是否满足条件即可。

后七个点

m内因数中包含质数p的数分别为p*1,p*2,p*3...p*m/i。用等差数列的知识可以得到该数列的和,记为f(i)。根据容斥原理,结果为sum(f(p[i]))-sum(f(p[i]*p[j]))+sum(f(p[i]*p[j]*p[k]))-...。

n个元素的集合的子集数量为2^n,而后七个点n<=20,符合要求。

注意事项

  • 每次想要对P取模时,不能直接x%P,而应当为(x%P+P)%P,因为运算中变量有可能暂时是负的。
  • 作为判断终止条件的当前乘积prod不能取模。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cassert>
using namespace std; #define ll long long
const int P = 376544743, INV2 = 188272372;
const int MAX_N = 100000;
ll Primes[MAX_N];
ll N, M, Ans; ll Mod(ll x, ll p)
{
return (x % p + p) % p;
} ll Mult(ll a, ll b)
{
ll ans = 0;
while (b)
{
if (b & 1)
ans = Mod(ans + a, P);
a = Mod(a + a, P);
b >>= 1;
}
return ans;
} void Dfs(int cnt, int p, ll prod)
{
assert(prod <= M);
if (cnt > 0)
{
ll n = M / prod;
ll delta = Mult(Mult(n, n + 1), INV2);
delta = Mult(delta, prod);
if (cnt & 1)
Ans = Mod(Ans + delta, P);
else
Ans = Mod(Ans - delta, P);
}
if (p == N)
return;
ll NextProd;
for (int i = p + 1; i <= N && (NextProd=prod*Primes[i])<=M; i++)
Dfs(cnt + 1, i, NextProd);
} ll way1()
{
ll ans = 0;
for (ll i = 1; i <= M; i++)
{
for (ll j = 1; j <= N && Primes[j] <= i; j++)
{
if (i % Primes[j] == 0)
{
ans = (ans + i) % 376544743;
break;
}
}
}
return ans;
} int main()
{
scanf("%lld%lld", &N, &M);
for (int i = 1; i <= N; i++)
scanf("%lld", Primes + i);
sort(Primes + 1, Primes + N + 1);
if (N*M <= 10000000)
printf("%lld\n", way1());
else
{
Ans = 0;
Dfs(0, 0, 1);
printf("%lld\n", Ans);
//printf("%lld\n", Ans%P);
}
return 0;
}

  

luogu2429 制杖题的更多相关文章

  1. P2429 制杖题

    P2429 制杖题这个题用线性筛会WA一个点,因为这个题是给定的质数集,最大的质数会比当前的倍数大,就会出现上面的情况.怎办?判重用set啊!set+线性筛就过掉了.16ms #include< ...

  2. P2429 【制杖题】

    这题目名字也是够了... emmmmmm为什么要用线筛??????不感觉很麻烦吗??????既然是智障制杖题,那么肯定要用很简单的算法啦~下面,我就提供一种非常便于理解的膜你算法~~~很明显,做了这题 ...

  3. 洛谷P2429 制杖题 [2017年6月计划 数论10]

    P2429 制杖题 题目描述 求不大于 m 的. 质因数集与给定质数集有交集的自然数之和. 输入输出格式 输入格式: 第一行二个整数 n,m. 第二行 n 个整数,表示质数集内的元素 p[i]. 输出 ...

  4. PAT甲级 进制转换题_C++题解

    进制转换题 PAT (Advanced Level) Practice 进制转换题 目录 <算法笔记> 重点摘要 1015 Reversible Primes (20) 1019 Gene ...

  5. OI回忆录——一个过气OIer的制杖历程

    初中 初一参加学校信息学选修课,一周一节课,学pascal. 初一寒假(大约是)入选(其实是钦定吧)当时加上我只有3人的校队(我当然是最弱的一个. 当时甚至有幸得到叉姐授课(现在才知道这是多么难得的机 ...

  6. 【蓝桥】第八届C语言C组第7题 Excel地址(进制变形题,stack()简单使用)转载

    标题: Excel地址 Excel单元格的地址表示很有趣,它使用字母来表示列号. 比如, A表示第1列, B表示第2列, Z表示第26列, AA表示第27列, AB表示第28列, BA表示第53列, ...

  7. [题解向] CF#Global Round 1の题解(A $\to$ G)

    这里是总链接\(Link\). \(A\) 题意:求\(\sum_{i=1}^{k} a_i\times b^{k-i}\)的奇偶性, \(k = \Theta(n \log n)\) --其实很容易 ...

  8. 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)

    写在前面:SDOI2016 Round1滚粗后蒟蒻开始做网络流来自我拯救(2016-04-11再过几天就要考先修课,现在做网络流24题貌似没什么用←退役节奏) 做的题目将附上日期,见证我龟速刷题. 1 ...

  9. LOJ#10117. 「一本通 4.1 练习 2」简单题

    LOJ#10117. 「一本通 4.1 练习 2」简单题 题目描述 题目来源:$CQOI 2006$ 有一个$n$个元素的数组,每个元素初始均为$0$.有$m$条指令,要么让其中一段连续序列数字反转— ...

随机推荐

  1. Java 自定义线程池

    Java 自定义线程池 https://www.cnblogs.com/yaoxiaowen/p/6576898.html public ThreadPoolExecutor(int corePool ...

  2. Matlab移植到Eigen用到的词条

    同型矩阵运算满足加法交换律.结合律:并存在单位元.逆元.和0元,为同型矩阵对加法的交换环. Eigen的简单运算参考:http://blog.163.com/jiaqiang_wang/blog/st ...

  3. 【JSP】上传图片到数据库中

    第一步:建立数据库 create table test_img(id number(4),name varchar(20),img long raw); 第二步:(NewImg.html) <h ...

  4. python利用numpy存取文件

    NumPy提供了多种存取数组内容的文件操作函数.保存数组数据的文件可以是二进制格式或者文本格式.二进制格式的文件又分为NumPy专用的格式化二进制类型和无格式类型. numpy格式的文件可以保存为后缀 ...

  5. tomcat实现连接数据库

    192.168.30.23mkdir  /web/webapptar xf SLSaleSystem.tar.gz -C /web/webappls /web/wenbappvim /usr/loca ...

  6. Selenium三种等待的使用方式

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  7. 【剑指Offer】12、数值的整数次方

      题目描述:   给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.   解题思路:   本题看似比较简单,是一个简单的指数运算,但需要完 ...

  8. namespace、struct、enum、union、string(day01)

    一 C++概述 C++历史背景 )C++的江湖地位 jave C C++ C# python )C++之父:Bjarne Stroustrup(--) ,Cpre,为C语言增加类的机制 ,Bjarne ...

  9. NOIP2013 DAY2 T3火车运输

    传送门 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况 ...

  10. [luogu2461 SDOI2008] 递归数列 (矩阵乘法)

    传送门 Description 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai- ...