Almost-perfect Number
Submit solution
ADA, Brainf*ck, C, C#, C++, clang, clang++, Cobol, Fortran, Haskell, Java, Java 11, JAVA 8, LUA, Pascal, PHP, text, ZIG
Points:
1
Time limit:
2.0s
Memory limit:
512M
C99
512K
Author:
Problem type
Allowed languages
Problem Description
一個正整數N的真因數是那些小於N的因數,例如6的真因數有。如果的真因數總和恰好等於,則稱是perfect number,例如。輸入兩數與,計算在與之間的數字中,哪一個數字N的真因數總和不超過N而與N的差值最小,如果最小差值的數字不只一個,則輸出其中最小的那一個。
Input Format
第一行是測資筆數,。每筆測資一行,包含兩個正整數p與q,其中p,q都大於1且不超過1,000,000。
Output Format
每筆測資輸出一行,先輸出最小差值,再輸出滿足最小差值中最小的數字。
例如: , ,則:
6-(1+2+3)=0
7-(1)=6
8-(1+2+4)=1
因此輸出與。 又例如: ,則:
8-(1+2+4)=1,
9-(1+3)=5,
10-(1+2+5)=2,
11-(1)=10,
12<(1+2+3+4+6),
因此輸出與。
Sample Input
2
6 8
12 8
Sample Output
0 6
1 8
Comments
include<stdio.h>
void solution(int,int);
int main() { int n1,n2; scanf("%d%d",&n1,&n2); solution(n1,n2); return 0; } void solution(int n1,int n2) { int temp1,temp2,min,minfirst,ans; if(n1 > n2)//確保n1<=n2,使用temp1 { temp1 = n1; n1 = n2; n2 = temp1; } for(int i = n1;i <= n2;i++)//n1~n2計算 { for(int j = 1;j < i;j++)//因數統整,使用temp2 { if(i % j ==0) temp2 = temp2 + j; } if((min>(i-temp2)&&(i-temp2)>0) || minfirst==0)//minfirst為min第一次不條件通過 { min = i-temp2;//改變min ans = i;//改變min所屬的n1 } temp2 = 0;//temp2迴圈後歸零 minfirst = 1; } printf("%d %d",min,ans); }
include<stdio.h>
int main() {
}