hdu 2841 Visible Trees
2017-08-08 19:21
302 查看
点这里
素数打表
素因子分解
容斥定理
固定m 在1-n中找与m互质的数
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
using namespace std;
const int maxn=1e6+5;
int prime[maxn];
int vis[maxn],cnt,p;
typedef long long ll;
ll gcd(ll n, ll m)
{
if(m==0)
return n;
else
return gcd(m,n%m);
}
void init()
{
cnt = 0;
memset(vis,0,sizeof(vis));
for(int i=2; i<maxn; i++)
{
if(!vis[i])
{
prime[cnt++]=i;
for(int j=i+i; j<maxn; j+=i)
vis[j]=1;
}
}
}
int yz[maxn];
void syzfj(ll n)
{ p=0;ll x=n;
for(int i=0; i<cnt&&prime[i]*prime[i]<=n; i++)
{ ll tmp=0;
if(n%prime[i]==0)
{
yz[p]=prime[i];
while(x%prime[i]==0)
{
tmp++;
x/=prime[i];
}
p++;
}
}
if(x>1)
{
yz[p]=x;
p++;
}
}
ll ttt(int tt,int i)
{
syzfj(i);ll ans=0;
for(int i=1; i<(1<<p); i++)
{
ll cj=1;int c=0;
for(int j=0; j<p; j++)
{
if(i&(1<<j))
{
c++;
cj*=yz[j];
}
}
if(c%2==0)
ans-=tt/cj;
else
ans+=tt/cj;
}
return tt-ans;
}
int main()
{
int n,t,m;
cin>>t;
init();
while(t--)
{
cin>>n>>m;
ll ans=0;
for(int i=1;i<=n;i++)
ans+=ttt(m,i);
cout<<ans<<endl;
}
return 0;
}
素数打表
素因子分解
容斥定理
固定m 在1-n中找与m互质的数
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
using namespace std;
const int maxn=1e6+5;
int prime[maxn];
int vis[maxn],cnt,p;
typedef long long ll;
ll gcd(ll n, ll m)
{
if(m==0)
return n;
else
return gcd(m,n%m);
}
void init()
{
cnt = 0;
memset(vis,0,sizeof(vis));
for(int i=2; i<maxn; i++)
{
if(!vis[i])
{
prime[cnt++]=i;
for(int j=i+i; j<maxn; j+=i)
vis[j]=1;
}
}
}
int yz[maxn];
void syzfj(ll n)
{ p=0;ll x=n;
for(int i=0; i<cnt&&prime[i]*prime[i]<=n; i++)
{ ll tmp=0;
if(n%prime[i]==0)
{
yz[p]=prime[i];
while(x%prime[i]==0)
{
tmp++;
x/=prime[i];
}
p++;
}
}
if(x>1)
{
yz[p]=x;
p++;
}
}
ll ttt(int tt,int i)
{
syzfj(i);ll ans=0;
for(int i=1; i<(1<<p); i++)
{
ll cj=1;int c=0;
for(int j=0; j<p; j++)
{
if(i&(1<<j))
{
c++;
cj*=yz[j];
}
}
if(c%2==0)
ans-=tt/cj;
else
ans+=tt/cj;
}
return tt-ans;
}
int main()
{
int n,t,m;
cin>>t;
init();
while(t--)
{
cin>>n>>m;
ll ans=0;
for(int i=1;i<=n;i++)
ans+=ttt(m,i);
cout<<ans<<endl;
}
return 0;
}
相关文章推荐
- HDU 2841 Visible Trees(数论)
- hdu 2841 Visible Trees【容斥原理】
- hdu 2841 Visible Trees(容斥原理)
- [思维+容斥原理] hdu 2841 Visible Trees
- HDU 2841-Visible Trees(容斥原理)
- HDU 2841 Visible Trees(数论)
- HDU 2841 Visible Trees 解题报告(筛 or 容斥原理)
- hdu 2841 Visible Trees (容斥原理)
- HDU 2841 Visible Trees(容斥原理)
- hdu 2841 Visible Trees(容斥原理)
- HDU 2841 Visible Trees 数论+容斥原理
- HDU 2841 Visible Trees
- HDU 2841 Visible Trees
- 【数论-莫比乌斯】hdu 2841 Visible Trees
- HDU 2841 Visible Trees -gcd+莫比乌斯
- 【HDU 2841】Visible Trees(容斥原理-好题)
- HDU 2841 Visible Trees (数论,容斥原理)
- HDU 2841 Visible Trees(莫比乌斯反演)
- HDU 2841 Visible Trees
- HDU 2841 Visible Trees(容斥原理,数论)