NYOJ 题目998 Sum(欧拉函数,水)

来源:互联网 发布:小学生题目解答软件 编辑:程序博客网 时间:2024/06/10 05:28

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
样例输入
31 110 210000 72
样例输出
1351305000
上传者

ACM_张书军

丫的今天做题不顺,深夜水道水题压压惊

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);}}


0 0
原创粉丝点击