hdu 数学题目

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 5   Accepted Submission(s) : 4
Problem Description
A Central Meridian (ACM) Number N is a positive integer satisfies that given two positive integers A and B, and among A, B and N, we have
N | ((A^2)*B+1) Then N | (A^2+B)
Now, here is a number x, you need to tell me if it is ACM number or not.
 


 

Input
The first line there is a number T (0<T<5000), denoting the test case number. The following T lines for each line there is a positive number N (0<N<5000) you need to judge.< div>
 

Output
For each case, output “YES” if the given number is Kitty Number, “NO” if it is not.
 

Sample Input
   
   
2 3 7
 

Sample Output
   
   
YES NO [hint] Hint X | Y means X is a factor of Y, for example 3 | 9; X^2 means X multiplies itself, for example 3^2 = 9; X*Y means X multiplies Y, for example 3*3 = 9. [/hint]

 

题解:对于这道题目,Kitty 数满足给出任意A,B,必须同时满组 N | ((A^2)*B+1) Then N | (A^2+B)  才行,出现一个不成立就不正确。但是对于这道题目出现映射问题,具体思路要将不满足题意的标记,最后剩余的就是满足的熟,经过打表测试,发现只有21组合格数据。直接进行匹配即可。。。

#include<stdio.h>
#include<string.h>
int map[21]={1,2,3,4,5,6,8,10,12,15,16,20,24,30,40,48,60,80,120,240};
int main()
{
	int a,b,i,j,n;
	int x,y;
	int mark;
//	memset(map,0,sizeof(map));
//	  for(n=1;n<=250;n++)
//     {   mark=1;
//         for(i=1;i<=1000;i++)
//        {
//            for(j=1;j<=1000;j++)
//            {
//               y=i*i*j+1;
//                 if(y%n==0)
//                {
//                   y=i*i+j;
//                   if(y%n)
//                   {
//                      mark=0;
//                      map[n]=1;
//                      break;
//                   }
//                }
//            }
//           if(mark==0)
//             break;
//       }
//    }
    int T;
    scanf("%d",&T);
    while(T--)
    {
    	scanf("%d",&n);
    	int mark=0;
        for(int i=0;i<21;i++)
        {
        	if(map[i]==n)
            {
            	mark=1;
            	break;
            }
        }
        if(!mark)
        {
        	printf("NO\n");
        }
        else
        {
        	printf("YES\n");
        }
    }

return 0;
}



 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值