GCD
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b),is the largest divisor common to a and b,For example,(1,2)=1,(12,18)=6.
(a,b) can be easily found by the Euclidean algorithm. Now Carp is considering a little more difficult problem:
Given integers N and M,please answer sum of X satisfies 1<=X<=N and (X,N)>=M.-
输入
- The 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 (1<=N<=10^9, 1<=M<=10^9), representing a test case. 输出
- Output the answer mod 1000000007 样例输入
-
3 1 1 10 2 10000 72
样例输出
-
1 35 1305000
上传者
丫的今天做题不顺,深夜水道水题压压惊
ac代码
#include<stdio.h> #include<string.h> long long eular(long long n) { int i; long long ans=n; for(i=2;i*i<=n;i++) { if(n%i==0) { ans-=ans/i; while(n%i==0) n/=i; } } if(n>1) ans-=ans/n; return ans; } int main() { long long n,m; while(scanf("%lld%lld",&n,&m)!=EOF) { int i; long long ans=0; for(i=1;i*i<=n;i++) { if(n%i==0) { if(i>=m) ans+=i*eular(n/i); if(i*i!=n&&n/i>=m) ans+=n/i*eular(i); } } printf("%lld\n",ans); } }