HDU 4135——Co-prime(容斥原理&&二進位制列舉)
模板
void prime(ll n)
{
k=0;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
Prime[k++]=i;
while(n%i==0)
n/=i;//這一步是把相同質因子除去,如12有兩個2
}
}
if(n>1)
Prime[k++]=n;
}
ll Find(ll num)
{
ll ans=0,temp,flag;
for(ll i=1;i<(ll)(1<<k);i++)
{
temp=1;
flag=0;
for(ll j=0;j<=k;j++)
{
if(i&(ll)(1<<j))
{
flag++;
temp*=Prime[j];
}
}
//cout<<temp<<endl;
if(flag&1)
ans+=num/temp;
else
ans-=num/temp;//奇加偶減
}
return ans;
}
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdio>
#include<queue>
#include<set>
using namespace std;
#define ll long long
#define maxn 1000010
ll a,b,n;
ll Prime[maxn];
int k;
void prime(ll n)
{
k=0;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
Prime[k++]=i;
while(n%i==0)
n/=i;//這一步是把相同質因子除去,如12有兩個2
}
}
if(n>1)
Prime[k++]=n;
}
ll Find(ll num)
{
ll ans=0,temp,flag;
for(ll i=1;i<(ll)(1<<k);i++)
{
temp=1;
flag=0;
for(ll j=0;j<=k;j++)
{
if(i&(ll)(1<<j))
{
flag++;
temp*=Prime[j];
}
}
//cout<<temp<<endl;
if(flag&1)
ans+=num/temp;
else
ans-=num/temp;//奇加偶減
}
return ans;
}
int main()
{
int t;
int flag=0;
cin>>t;
while(t--)
{
cin>>a>>b>>n;
prime(n);
cout<<"Case #"<<++flag<<": "<<b-a+1-Find(b)+Find(a-1)<<endl;
}
return 0;
}
參考連結:
https://blog.csdn.net/qq_36336399/article/details/76406320
相關文章
- HDU 4135 Co-prime(容斥原理+分解質因數)
- HDU 4937 Lucky Number(列舉進位制)
- HDU 4059 The Boss on Mars ( 容斥原理)
- HDU4390Number Sequence(容斥原理)
- HDU4407Sum ( 容斥原理)
- 2013南京站I題||hdu4810 二進位制列舉
- HDU 5468 Puzzled Elena(DFS序+容斥原理)
- HDU2841 Visible Trees (容斥原理)
- 二進位制陣列陣列
- HDU 1695-GCD(容斥原理+尤拉函式)GC函式
- 容斥原理
- 【模板】容斥原理
- 二進位制陣列 subarray() 方法陣列
- 二進位制與二進位制運算
- 二進位制陣列 buffer 屬性陣列
- 二進位制陣列 length 屬性陣列
- 容斥原理講解
- 進位制詳解:二進位制、八進位制和十六進位制
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- (二進位制)
- 二進位制
- 十進位制——二 (八、十六 )進位制
- JavaScript二進位制陣列建立注意點JavaScript陣列
- 二進位制陣列 byteLength 屬性陣列
- 二進位制陣列 byteOffset 屬性陣列
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- 遊戲裡面的容斥原理遊戲
- 二進位制、十進位制與十六進位制相互轉化
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- Python 進位制互相轉換(二進位制、十進位制和十六進位制)Python
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- 二進位制轉十進位制快速方法
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- 什麼是二進位制?二進位制如何轉換?
- 04 二進位制
- 大話二進位制,八進位制,十進位制,十六進位制之間的轉換