HDU 1406 정수 (매 거 + 타 표)

완전무결 하 다
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 25482    Accepted Submission(s): 9386
Problem Description
완수의 정의: 만약 에 1 보다 큰 정수 의 모든 인자 의 합 이 그 자체 와 같다 면 이 수 는 완수 라 고 부른다. 예 를 들 어 6, 28 은 모두 완수 이다. 6 = 1 + 2 + 3.28=1+2+4+7+14。 이 문제 의 임 무 는 두 정수 사이 의 완 수 를 판단 하 는 것 이다.
 
Input
입력 데 이 터 는 여러 줄 을 포함 합 니 다. 첫 번 째 줄 은 하나의 정수 n 으로 테스트 인 스 턴 스 의 개 수 를 표시 합 니 다. 그 다음 에 n 개의 테스트 인 스 턴 스 입 니 다. 모든 인 스 턴 스 는 한 줄 을 차지 하고 두 개의 정수 num 1 과 num 2 로 구성 되 어 있 습 니 다. (1 < num 1, num 2 < 10000)
Output
각 그룹의 테스트 데이터 에 대해 서 는 num 1 과 num 2 사이 (num 1 과 num 2 포함) 에 존재 하 는 정수 개 수 를 출력 하 십시오.
 
Sample Input

   
   
   
   
2 2 5 5 7

Sample Output

   
   
   
   
0 1

Author
lcy
Source
항 저 우 전기 ACM 합숙 훈련 대 훈련 경기 (IV)
 
타 표
AC 코드:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdlib>
#include<iomanip>
#include<algorithm>
#include<time.h>
typedef long long LL;
using namespace std;
bool Wan_shu(int n){
	int sum = 1;
	for (int i = 2; i < n; i++){
		if (n%i == 0){
			sum += i;
		}
	}
	if (sum == n) return 1;
	else return 0;
}

int main(){
	
	int ws[10000] = { 0 };         
	for (int i = 0; i < 10000; i++){        //   
		if (Wan_shu(i)){
			ws[i] = 1;
		}
	}
	int T;
	cin >> T;
	while (T--){
		int a, b;
		int count = 0;
		cin >> a >> b;
		if (a > b){
			swap(a,b); 
		}
		for (int i = a; i <= b; i++){
			count += ws[i];
		}
		cout << count << endl;
	}
	return 0;
}

좋은 웹페이지 즐겨찾기