hdu_2588_GCD
(a,b) can be easily found by the Euclidean algorithm. Now Carp is considering a little more difficult problem:
Given integers N and M, how many integer X satisfies 1<=X<=N and (X,N)>=M.
InputThe first line of input is an integer T(T<=100) representing the number of test cases. The following T lines each contains two numbers N and M (2<=N<=1000000000, 1<=M<=N), representing a test case.OutputFor each test case,output the answer on a single line.Sample Input
- 3
- 1 1
- 10 2
- 10000 72
Sample Output
- 1
- 6
- 260
这是一道不错的题目,很有启发性。
假设x<=n,n=p*d,x=q*d.假设n与x的最大公约数为d,则能够推出p与q肯定是互质的,因为x<=n所以要求的就是p的欧拉函数值了,那么我们就转化成求满足:n=p*d,并且d>=m的p的欧拉函数值之和了。
- #include<iostream>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- #include<cstdio>
- #define N 1000010
- using namespace std;
- typedef long long ll;
- int prime[N];
- bool vis[N];
- int pn=0;
- ll a[N];
- long long p(long long n){ //返回euler(n)
- long long res=n,a=n;
- for(long long i=2;i*i<=a;i++){
- if(a%i==0){
- res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出
- while(a%i==0) a/=i;
- }
- }
- if(a>1) res=res/a*(a-1);
- return res;
- }
- int main()
- {
- for (int i = 2; i < N; i++) {
- if (vis[i]) continue;
- prime[pn++] = i;
- for (int j = i; j < N; j += i)
- vis[j] = 1;
- }
- ll i,j,n,m;
- int t;
- scanf("%d",&t);
- while(t--)
- {
- ll ans=0;
- scanf("%lld%lld",&n,&m);
- for(i=1;i*i<=n;i++)
- {
- if(n%i==0)
- {
- if(i>=m&&i*i!=n)
- ans+=p(n/i);
- if(n/i>=m)
- ans+=p(i);
- }
- }
- cout<<ans<<endl;
- }
- }
hdu_2588_GCD的更多相关文章
随机推荐
- 使用durid的ConfigFilter对数据库密码加密
<!-- 配置dbcp数据源 --> <bean id="remoteDS" class="org.apache.commons.dbcp.BasicD ...
- PAT 1066 Root of AVL Tree
#include <cstdio> #include <cstdlib> class Node { public: Node* L; Node* R; int height; ...
- Myeclipse中进行JUnit单元测试
最近学习了在myeclipse中进行单元测试,写点东西总结总结. JUnit单元测试: 测试对象为一个类中的方法. juint不是javase中的部分,所以必须导入jar包,但是myeclipse自带 ...
- pl/sql实现金额转换为大写
FUNCTION upper_case_currency(vrmb char) RETURN varchar2 IS rmbwodecimal varchar2(20); result varchar ...
- SpannableString与SpannableStringBuilder使用
转自:http://blog.it985.com/14433.html1.SpannableString.SpannableStringBuilder与String的关系 首先SpannableStr ...
- 将CSV文件中的数据导入到SQL Server 数据库中
导入数据时,需要注意 CSV 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提 ...
- c#中abstract、override、new、virtual、sealed使用和示例
原文地址:http://blog.csdn.net/richerg85/article/details/7407544 abstract 修饰类名为抽象类,修饰方法为抽象方法.如果一个类为抽 ...
- 手写vector
看过JDK源码,现在自己想实现一个vector. 最开始的时候,我大概构想了一下怎么设计,一种是设置一个指针数组来存放对象,这样修改的时候可以不用大量的元素复制,但后来仔细想了想,它需要设置一个额外的 ...
- WAKE-WIN10-SOFT-软件-Matlab配置及工具箱
1Matlab 1,1Matlab下载,安装,配置,,, 1,2 2工具箱 2,1LibSVM 必应:https://www.bing.com/search?q=libsvm&qs=n& ...
- vue v-on 带参事件
1.js代码 var list=[ //定义一个数组 {title:} ] var box=new Vue({ el:'.box', data:{ list:list }, methods:{ //d ...