南京理工校赛 c count_prime 容斥原理 求(1,r)与n互质模板
2016-04-19 19:25
459 查看
count_prime
Time Limit: 1000msMemory Limit: 65536KB
Description
给定你一个数n,请你统计出在[a,b]这个区间中和n互质的数的个数。两个数互质当且仅当他们除了1之外没有其他的公共因子或者他们最大的公共因子是1。1和任何数是互素的。Input
第一行输入一个整数T(1 <= T <= 100),表示T组测试数据。接下来T行,每行3个整数a,b,n(1 <= a <=b <=10^15, 1<= n <= 10^9),用空格隔开。Output
输出一个整数表示和n互质的数的个数。Sample Input
2 1 10 2 3 10 5
Sample Output
5 6 ACcode:
#include <map> #include <queue> #include <cmath> #include <cstdio> #include <cstring> #include <stdlib.h> #include <iostream> #include <algorithm> #define maxn 100 using namespace std; typedef long long ll; ll slove(ll r,ll n){ vector<ll>p; for(ll i=2;i*i<=n;++i) if(n%i==0){ p.push_back(i); while(n%i==0) n/=i; } if(n>1)p.push_back(n); ll sum=0; for(ll msk=1;msk<(1<<p.size());++msk){ ll mult=1,bits=0; for(ll i=0;i<(ll)p.size();++i) if(msk&(1<<i)){ ++bits; mult*=p[i]; } ll cur=r/mult; if(bits%2==1)sum+=cur; else sum-=cur; } return r-sum; } int main(){ int t; ll n,m,k; scanf("%d",&t); while(t--){ scanf("%lld%lld%lld",&n,&m,&k); printf("%lld\n",slove(m,k)-slove(n-1,k)); } return 0; }
相关文章推荐
- 线程的控制与分离
- [C语言][LeetCode][82]Remove Duplicates from Sorted List II
- 计算机图形学(二)输出图元_6_OpenGL曲线函数_1_圆生成算法
- 综合案例 第80课:Spark SQL网站搜索综合案例实战 以京东找出搜索平台上用户每天搜索排名5名的产品,The hottest!
- 广告条目的android代码,常使用
- JavaScript匿名函数
- 图解VC6辅助编程工具的使用
- Quartz的触发器使用
- Filter的应用——IP计数
- Java入门(概述篇)
- Python学习(4)运算符
- android SQLite(安卓数据库的插入显示删除)
- JavaScript动态函数
- 串(链串)
- 面试题89:字符串数组首尾字符相同
- python基础教程第4章——字典
- JavaScript数据类型
- FJNUOJ1156
- C# OOP程序设计目录
- C# OOP程序设计目录