前置技能:

<=i且与i互质的数的和是phi(i)*i/2

思路:

显然每个人的步数是gcd(a[i],m)

把m的所有因数预处理出来

1~m-1中的每个数 只会被gcd(m,i)筛掉一遍

//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=;
typedef long long ll;
int cases,n,m,a[N],s[N],tp,I=;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int get_phi(int x){
int t=x;
for(int i=;i*i<=x;i++)if(x%i==){
t-=t/i;
while(x%i==)x/=i;
}if(x>)t-=t/x;
return t;
}
int main(){
for(scanf("%d",&cases);I<=cases;I++){
long long ans=;tp=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&a[i]),a[i]=gcd(a[i],m);
sort(a+,a++n);
n=unique(a+,a++n)-a-;
for(int i=;i*i<=m;i++)if(m%i==){
if(i*i==m)s[++tp]=i;
else{
s[++tp]=i;
if(i!=)s[++tp]=m/i;
}
}
for(int i=;i<=tp;i++)
for(int j=;j<=n;j++)if(s[i]%a[j]==){
ans+=get_phi(m/s[i]);break;
}
printf("Case #%d: %lld\n",I,1ll*ans*m/);
}
}

最新文章

  1. Linux Shell 截取字符串
  2. 聊一下C#开发者如何过渡到JAVA 开发者
  3. MFC 打开文件夹 调用其他程序 打开文件
  4. hdu 1199 Color the Ball
  5. Vim 保存和退出命令
  6. 获取C#中exe程序的实例名
  7. Cocos2d-x 坑之一:Xcode文件真实目录与工程视图目录
  8. 织梦DedeCMS子目录移动到根目录的方法
  9. Android 判断当前网络连接类型
  10. Oracle 查看执行计划
  11. zookeeper参考
  12. 3D VR卡镜的使用方法
  13. 报表工具-ECharts 特性介绍
  14. C#中使用log4net框架做日志输出
  15. Mysql查询缓存Query_cache的功用
  16. ctf入门常见类别
  17. require.js 简洁入门
  18. 20145221高其_PC平台逆向破解_advanced
  19. Yarn application has already exited with state FINISHED
  20. Android: 利用SurfaceView绘制股票滑动直线解决延迟问题

热门文章

  1. 【数轴涂色+并查集路径压缩+加速】C. String Reconstruction
  2. HDU 5950 Recursive sequence 递推转矩阵
  3. 【进击后端】Ubuntu 命令行 安装nginx
  4. centos7grub2 引导win10
  5. Centos7最小安装下Install Clamav(2017-06-09最后更新)
  6. $.extent()的理解
  7. 使用requireJS的shim參数,完毕jquery插件的载入
  8. 工作总结 default Console.WriteLine(default(Guid));
  9. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
  10. 阿里云CentOS7.3搭建多用户私有git服务器(从安装git开始)