hdu 2588 오랫동안 수 논 제 를 풀 었 습 니 다.
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 605 Accepted Submission(s): 268
Problem Description
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, how many integer X satisfies 1<=X<=N and (X,N)>=M.
Input
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 (2<=N<=1000000000, 1<=M<=N), representing a test case.
Output
For each test case,output the answer on a single line.
Sample Input
3
1 1
10 2
10000 72
Sample Output
1
6
260
/*
: case
n m 1 n n m
:
n m k n/k phi( ) n/k n/k
n/k n/k n/k k n k (k>m)
phi(n/k) 。。。。。。。。。。。。。
: k1 k2 n 2 n/k1 n/k2
k1,k2 ?
*/
#include<stdio.h>
#include<math.h>
int num[40000],cnt2;
int phi(int x)//
{
int i, res=x;
for (i = 2; i <(int)sqrt(x * 1.0) + 1; i++)
if(x%i==0)
{
res = res /i * (i - 1);
while (x % i == 0) x /= i; // i
}
if (x > 1) res = res /x * (x - 1);//
return res;
}
int main()
{
int i,Cas;
scanf("%d",&Cas);
while(Cas--)
{
int n,m;
scanf("%d%d",&n,&m);
cnt2=0; int s=0;
for(i=1;i*i<n;++i)// n
if(n%i==0)
{
// if(i>=m)
// s+=phi(i);
// if(n/i>=m)
// s+=phi(n/i);
if(i>=m)
num[cnt2++]=i;
if(n/i>=m)
num[cnt2++]=n/i;
}
if(i*i==n&&n%i==0&&i>=m) num[cnt2++]=i;
for(i=0;i<cnt2;++i)
s+=phi(n/num[i]);
printf("%d
",s);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
cocos2d Lua 학습(一)ios에서 루아 함수 호출 및 전참 방법 lua 코드: 출력 결과: lua 호출 C++ 방법: add 함수: lua 코드: 출력 결과: 함수를 호출합니다. 함수를 호출하려면 다음 협의를 따르십시오. 우선, 호출할 함...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.