HDU 5514 欧拉函数应用
2024-09-08 05:31:36
前置技能:
<=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/);
}
}
最新文章
- Linux Shell 截取字符串
- 聊一下C#开发者如何过渡到JAVA 开发者
- MFC 打开文件夹 调用其他程序 打开文件
- hdu 1199 Color the Ball
- Vim 保存和退出命令
- 获取C#中exe程序的实例名
- Cocos2d-x 坑之一:Xcode文件真实目录与工程视图目录
- 织梦DedeCMS子目录移动到根目录的方法
- Android 判断当前网络连接类型
- Oracle 查看执行计划
- zookeeper参考
- 3D VR卡镜的使用方法
- 报表工具-ECharts 特性介绍
- C#中使用log4net框架做日志输出
- Mysql查询缓存Query_cache的功用
- ctf入门常见类别
- require.js 简洁入门
- 20145221高其_PC平台逆向破解_advanced
- Yarn application has already exited with state FINISHED
- Android: 利用SurfaceView绘制股票滑动直线解决延迟问题
热门文章
- 【数轴涂色+并查集路径压缩+加速】C. String Reconstruction
- HDU 5950 Recursive sequence 递推转矩阵
- 【进击后端】Ubuntu 命令行 安装nginx
- centos7grub2 引导win10
- Centos7最小安装下Install Clamav(2017-06-09最后更新)
- $.extent()的理解
- 使用requireJS的shim參数,完毕jquery插件的载入
- 工作总结 default Console.WriteLine(default(Guid));
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
- 阿里云CentOS7.3搭建多用户私有git服务器(从安装git开始)