hdoj 2588 GCD
来源:互联网 发布:换手机登陆淘宝账号 编辑:程序博客网 时间:2024/05/16 17:11
题目链接:GCD
题目大意:给你一个N,要求你在这个N里面找出有多少个x使得gcd(x,N) >= m
题目思路:朴素的暴力肯定T,所以我们可以想到进行优化,gcd(x,N) >= m,则题目一定有大于等于m的最大公约数s,则s*a = x,s*b = N,而且a,b必须得互质,否则,最大公约数就不止s了,因为N > x,则b > a且a与b互质,我们枚举了符合条件的b之后要去找比b小且互质的数,也就是找b的欧拉值,那么这道题就可以做出来了
#include <map>#include <set>#include <cmath>#include <vector>#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;ll Euler(ll n){ ll res = n; for(ll i = 2;i*i <= n;i++){ if(n%i == 0) res = res/i*(i-1); while(n%i == 0) n /= i; } if(n > 1) res = res/n*(n-1); return res;}int main(){ ll t,n,m,ans; scanf("%lld",&t); while(t--){ ans = 0; scanf("%lld%lld",&n,&m); for(int i = 1;i*i <= n;i++){//i为枚举的s if(n%i == 0){ if(i >= m)ans += Euler(n/i); if(i*i != n&&n/i >= m) ans += Euler(i); } } printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- HDOJ 2588 GCD
- hdoj 2588 GCD
- HDOJ 2588 GCD
- hdoj-2588-GCD
- hdoj-【2588 GCD】
- hdoj 2588 GCD
- 【欧拉函数】 HDOJ 2588 GCD
- hdoj 2588 GCD(欧拉函数)
- hdoj 2588GCD(欧拉函数)
- HDOJ GCD 2588【欧拉函数】
- HDOJ 2588 GCD(欧拉函数)
- hdoj 2588 GCD【欧拉函数】
- HDOJ 2588 GCD (欧拉函数)
- hdoj GCD 2588 (欧拉函数)
- hdoj 1695 GCD
- HDOJ 5223 GCD
- hdoj--2534--Score(gcd)
- HDOJ-1695 GCD
- matlab2c使用c++实现matlab函数系列教程-flipud函数
- 安卓开发艺术探索笔记第一章
- 区块链3.0(二):超越货币、经济和市场的效率和协作应用
- Neo4J CQL -(19)- 字符串函数
- JQuery自定义命名空间
- hdoj 2588 GCD
- React-Native学习总结
- Android攻城狮的第二门课(第1季)第8章 Fragment基础概述
- 区块链2.0(二):区块链在金融服务领域的运用案例
- C和C++中struct和typedef struct的分析
- 接口的应用——工厂设计模式
- [NOIP2017模拟]Bovine Genomics
- 区块链2.0(三):智能合约应用案列及相关法律问题
- 近 100 个 Linux 常用命令大全