算法:

利用数据1...N的性质,求与P的互质的个数,位运算,容斥定理。。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<vector>
#include<string>
#include<math.h>
#include<map>
#include<set>
#include<algorithm>
using namespace std;struct info
{int s,e,p,num;
}seg[1010];struct pinfo
{int id, v, num;
}p[1010];int factor[1000]; //保存因子
map<int,int>mp;int gcd( int n, int m )
{return m ? gcd(m, n % m ) : n;
}//容斥定理求互质之和
long long cal( int x, int n)
{//分解出x的因子if( x == 0 )return 0;int i,Lim = sqrt( x * 1.0 ), cnt = 0;for( i = 2; i <= Lim; i++){if( x % i == 0 ){factor[++cnt] = i;while( x % i == 0 )x = x / i;   }        }if( x != 1 ){factor[++cnt] = x;      }int mask = 1 << cnt;long long ans = 0;for( int i = 1; i < mask; i++){  int tt = 0, fac = 1, k;for( int j = 0; j < cnt; j++){if( i & (1<<j) ){tt++;fac *=  factor[j+1];}       }//如果是奇数项      if( tt & 1 ){k = n / fac;ans += ( fac + 1LL * fac * k ) * k / 2;}   else{k = n / fac;ans -= ( fac + 1LL * fac * k ) * k / 2;  } }     return ans;
}int main( )
{int N, M, a, b, c, d, c1, c2, T;scanf("%d",&T);while( T-- ){  scanf("%d%d",&N,&M);c1 = c2 = 0;for( int i = 1; i <= M; i++){scanf("%d",&a);if( a == 1 ){scanf("%d%d%d",&seg[c1].s, &seg[c1].e, &seg[c1].p);seg[c1].num = i;       c1++;}else{scanf("%d%d",&p[c2].id, &p[c2].v);p[c2].num = i;c2++; }              } long long x, y, pans;for( int i = 0; i < c1; i++) //枚举每一个查询
     {x = cal(seg[i].p, seg[i].s-1);y = cal(seg[i].p, seg[i].e);pans = ((1 + seg[i].e * 1LL) * seg[i].e * 1LL / 2 - y ) - (1 + seg[i].s - 1 ) * 1LL * (seg[i].s - 1) * 1LL / 2 + x;mp.clear();for( int j = 0; j < c2; j++){if( p[j].num <  seg[i].num && seg[i].e >= p[j].id && seg[i].s <= p[j].id ){mp[p[j].id] = p[j].v;   }else if( p[j].num > seg[i].num )break;    }map<int,int>::iterator it;for( it = mp.begin(); it != mp.end(); it++){int xx = gcd(seg[i].p, it->second);int yy = gcd(seg[i].p, it->first);if( yy == 1 && xx != 1 )pans -= it->first;else if( yy != 1 && xx == 1 )pans += it->second;      else if( yy == 1 && xx == 1 )pans += it->second - it->first;  } printf("%I64d\n", pans); }}return 0;
}

转载于:https://www.cnblogs.com/tangcong/archive/2012/09/22/2698434.html

HDU 4407 sum 容斥原理相关推荐

  1. HDU 4407 Sum(容斥原理+状态压缩)

    题目链接 容斥原理不会,map不会,状态压缩不会.做毛线... 题目大意:给出1-n,n个数,有两个操作1是询问x-y区间上与p互质的数的和是多少,2是改变x位置上的数为c. 自己确实办不了,map这 ...

  2. hdu 4407 Sum

    http://acm.hdu.edu.cn/showproblem.php?pid=4407 题意:给定初始n个数1..n,两个操作,①1 x y p  询问第x个数到第y个数中与p互质的数的和; ② ...

  3. HDU 4407 Sum(容斥+等差求和)

    题目大意:给n个数,1-n.然后有m次操作,分别是求(x,y)中与p互质的和:将第x个数替换成c. 思路:一开始觉得区间操作往线段树上想,但是要存的东西太多,没有办法实现. 后面其实仔细一想跟前面几道 ...

  4. HDU.1001 Sum Problem

    原题 HDU.1001 Sum Problem 分类 杂题 题意 计算从1到正整数n的累加和. 输入/输出 要求与格式 输入内容 每行输入一个正整数 输出结果 结果为累加和 输出格式 每个输出结果独占 ...

  5. hdu 1258 Sum It Up(回溯算法)

    题意:从给定的n个正整数中选出m个数(m <= n)使得这m个数的和为给定的total 解法:回溯 /* Author: ACb0y Date: 2010-11-11 ProblemId: hd ...

  6. HDU 4135 Co-prime(容斥原理)

    Co-prime 第一发容斥,感觉挺有意思的 →_→ [题目链接]Co-prime [题目类型]容斥 &题意: 求(a,b)区间内,与n互质的数的个数. \(a,b\leq 10^{15}\) ...

  7. hdu 4676 Sum Of Gcd 莫队+phi反演

    Sum Of Gcd 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4676 Description Given you a sequence of ...

  8. HDU 1258 Sum It Up

    这题郁闷了,排序过不了,后来仔细想想不用排序, 于是果断删了,没想到删了再杭电能过,在北大不能过,真郁闷了 这题是以简单DFS,在搜到时把结果存起来,然后再暴力搜索,看是否已存在这样的sum,最后一次 ...

  9. HDU 4135 Co-prime 容斥原理

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4135 题目描述: 给你A, B, N, 让你求A到B之间与N互质的数的个数 解题思路: 容斥原理, ...

最新文章

  1. layui时间怎么设置年月日时分秒_layui-laydate时间日历控件使用方法详解
  2. 学完python基础知识之后可以做些什么-学完Python基础知识后,你真的会python吗?...
  3. A-Frame.js 学习文档翻译(一)实体
  4. Lodop导出图片和打印机无关,测试是否有关
  5. Spring AOP详解一文搞懂@Aspect、@Pointcut、@Before、@Around、@After、@AfterReturning、@AfterThrowing
  6. 前端学习(1746):前端调试值之时间监听
  7. Atitit 人工智能目前的进展与未来 包含的技术 v2 r99.docx
  8. Servlet+JSP分页
  9. securecrt 上传文件到服务器,如何在SecureCRT下使用Zmodem传输文件
  10. 基于神经网络的倒立摆控制系统设计
  11. Ubuntu安装摄像头驱动
  12. LaTex 在线编辑编译,生成PDF —— Overleaf
  13. Windows下C++调用系统软键盘及其需要注意的点
  14. 阿里云Ubuton开MCJava服务器_每小时不到1元,弹性计算服务按流量缴费
  15. 加强版Apktool堪称逆向神器
  16. mysql中删除数据库语句
  17. 理解redux-thunk
  18. oracle中LOB字段相关概念(自动创建LOB索引段和重建索引方法)
  19. 企业中的IT需求如何管理?
  20. 十月总结——十一月展望

热门文章

  1. hbase RPCServer源码分析
  2. sskeychain使用(轻量级框架)
  3. 屏蔽浏览器默认样式 user agent stylesheet
  4. java类加载的表现形式
  5. 位域 内存 字节序_JS操作内存?二进制数组了解一下
  6. graphs菜单_图形用户界面菜单全面解析
  7. python做excel表格代码_python实现跨excel的工作表sheet之间的复制方法
  8. ssm radis mysql_从零开始搭建框架SSM+Redis+Mysql(一)之摘要
  9. vue 模板_简化版的 vue 页面模板语法
  10. 嵌入式linux应用程序升级,基于嵌入式Linux平台的应用升级机制的研究与设计