【HDU】 1787 GCD Again
来源:互联网 发布:淘宝百度云 编辑:程序博客网 时间:2024/05/16 11:50
GCD Again
题目链接
- GCD Again
题目大意
给定一个n,现在要求m的个数,满足gcd(n,m)>1 且(m<n)
题解
这一题很明显可以用欧拉函数,还可以用容斥原理,鉴于好久没写过容斥原理了,又把容斥原理写了一遍…
代码
欧拉函数
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>using namespace std;int n;int eular(int x){ int t=x,ans=x; for (int i=2;i<=sqrt(t);i++) if (t%i==0) { ans=(ans/i)*(i-1); while(t%i==0) t/=i; } if (t>1) ans=(ans/t)*(t-1); return ans;}int main(){ while(scanf("%d",&n),n!=0) { printf("%d\n",n-1-eular(n)); } return 0;}
容斥原理
#include <iostream>#include <cstring>#include <cstdio>#include <vector>#include <cmath>using namespace std;int n;vector<int> V;int solve(int n){ int cnt=1,ans=0,t; for (int i=1;i<(1<<V.size());i++) { cnt=1; t=0; for (int j=0;j<V.size();j++) if (i&(1<<j)) { cnt*=V[j]; t++; } cnt=(n-1)/cnt; if (t%2) ans+=cnt; else ans-=cnt; } return ans;}int main(){ while(scanf("%d",&n),n!=0) { V.clear(); int t=n; for (int i=2;i<=sqrt(n);i++) if (n%i==0) { V.push_back(i); while (n%i==0) n/=i; } if (n>1) V.push_back(n); printf("%d\n",solve(t)); } return 0;}
0 0
- hdu--1787---gcd again
- hdu 1787 GCD again
- hdu 1787 GCD Again
- hdu 1787 GCD Again
- HDU 1787 GCD Again
- 【HDU】 1787 GCD Again
- HDU 1787GCD Again
- hdu 1787 GCD Again 欧拉函数
- HDU 1787 GCD Again 欧拉函数
- GCD Again HDU杭电1787
- HDU 1787 GCD Again (欧拉函数)
- hdu 1918 GCD Again
- GCD Again HDU
- hdu 1787 GCD Again 欧拉函数小水水 数论
- HDU 1787 GCD Again 【欧拉函数模板】
- GCD Again HDU杭电1787【欧拉函数】
- HDU 1787 GCD Again (欧拉函数)
- HDU 1787 GCD Again (欧拉函数)
- 关于Python中的yield
- 动态顺序表的增、删、查、改、逆置、排序
- 灰度图像的对数变换原理及OpenCV代码实现!
- Visual Studio Code使用typings拓展自动补全功能
- 通过adb录制视频并通过FFMPEG将MP4转换成GIF格式(一)
- 【HDU】 1787 GCD Again
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]
- 各种 Java Thread State 第一分析法则
- va_list
- leetcode 189. Rotate Array
- Netty入门三:Netty概要讲解,全面了解Netty,做到胸有成竹
- 多线程 - 原子量AtomicLong
- Linux select()函数
- TextField文本域对象的用法