HDUOJ 还是七夕节

还是七夕节

Time Limit : 2000/1000ms (Java/Other)Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 396Accepted Submission(s) : 62

Font:Times New Roman|Verdana|Georgia

Font Size:

Problem Description

七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!"
人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:

HDUOJ 还是七夕节

数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6.
你的缘分如何呢?

Input

输入数据的第一行是一个数字T(1<=T<=500000),它表示测试数据的组数.然后是T组测试数据,每组测试数据只有一个数字N(1<=N<=500000).

Output

对于每组的测试数据N,可计算得到N的因子和M,假设M的因子和是K,则:
如果N==M 或者 M不在[1,500000]的范围之内,则请输出“注定单身”,
否则,如果 N==K,则请输出“缘分已定”;
其他情况,则请输出“缘分未到”;

Sample Input

3
6
7
220

Sample Output

注定单身
缘分未到
缘分已定
【解题思路】先打张表,之后就是根据要求判断,读懂题意打表很重要
//============================================================================
// Name        : 1009.cpp
// Author      : Weisi Shi
// Version     :
// Copyright   : Weisi Shi
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <bitset>
#include <vector>
#include <string>
#include <algorithm>

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <iomanip>
using namespace std;
#define max 500000
int a[max + 1] = { 0 };
int main() {
//freopen("text.txt","r",stdin);
int t, n, i, j;
a[0] = a[1] = 0;
for (i = 1; i <= max / 2; i++)
for (j = i + i; j <= max; j += i)
a[j] += i;

scanf("%d", &t);
while (t--) {
scanf("%d", &n);
if(n == a[n] || a[n]>max || a[n]<1){
printf("注定单身\n");
}
else if(n == a[a[n]]){
printf("缘分已定\n");
}
else{
printf("缘分未到\n");
}
}
return 0;

}