https://www.luogu.org/problemnew/show/P2231

题意相当于:
有n个位置a[1..n],每个位置可以填[1,m]中任一个整数,问共有多少种填法满足gcd(a[1],a[2],..,a[n],m)=1

可以反演一下

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const ll N=;
ll prime[N+],len;
bool nprime[N+];
ll ans;
ll poww(ll a,ll b)
{
ll bs=a,an=;
for(;b;b>>=,bs*=bs)
if(b&)
an*=bs;
return an;
}
ll getmu(ll x)
{
ll i,ans=,ed=sqrt(x+0.5);
bool fl;
for(i=;i<=len&&prime[i]<=ed;i++)
{
fl=;
while(x%prime[i]==)
{
if(fl) return ;
fl=;
x/=prime[i];
ans*=(-);
}
}
if(x!=) ans*=(-);
return ans;
}
ll n,m;
void work(ll d)
{
ans+=poww(m/d,n)*getmu(d);
}
int main()
{
ll i,j;
for(i=;i<=N;i++)
{
if(!nprime[i]) prime[++len]=i;
for(j=;j<=len&&i*prime[j]<=N;j++)
{
nprime[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
scanf("%lld%lld",&n,&m);
ll ed=sqrt(m+0.5);
for(i=;i<=ed;i++)
if(m%i==)
{
work(i);
if(m/i!=i) work(m/i);
}
printf("%lld",ans);
return ;
}

最新文章

  1. 两种适用于中小量数据的mysql数据备份
  2. easyUI 操作
  3. hadoop datanode 挂机恢复后,多复制的块删除的问题
  4. 201453408刘昊阳 《Java程序设计》第5周学习总结
  5. a:link,a:visited,a:hover,a:active
  6. struts2 jsp 传参 NullPointerException问题解决
  7. [转]JAVA程序员一定知道的优秀第三方库(2016版)
  8. ipa上传到APP store
  9. 遇到autoreconf: not found
  10. sql语句分页代码
  11. Secure CRT 如何连接虚拟机里面的CentOS系统 当主机没有网的时候 作者原创 欢迎转载
  12. vim代码粘贴缩进混乱的问题[Linux]
  13. vmware三种网络格式
  14. 基于 IJKPlayer-concat 协议的视频无缝拼接技术实现
  15. [ABP] ASP.NET Zero 5.6.0 之 ASP.NET Zero Power Tools 破解日志
  16. #实验三 敏捷开发与XP实践---实验报告
  17. spring 获取对象的注解
  18. 【BZOJ1826】[JSOI2010]缓存交换(贪心)
  19. 让某个软件无法被操作员最小化(C#演示)
  20. MeToo, one year on

热门文章

  1. 使用IIS建立主机到虚拟机的端口转发
  2. codeforces B. Polo the Penguin and Matrix 解题报告
  3. js中的命名空间
  4. JS倒计时,距离某一日期还有多少时间
  5. Java连接redis操作数据
  6. 使用 @RequestMapping 映射请求
  7. HDU1496(巧妙hash)
  8. spark运行模式之一:Spark的local模式安装部署
  9. 51nod1228
  10. StackOverFlow页面不正常,因为CDN被墙了