HDOJ 1999 HDU 1999 不可摸数 ACM 1999 IN HDU

MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

题目地址:
         http://acm.hdu.edu.cn/showproblem.php?pid=1999
题目描述:
不可摸数

Time Limit: 
2000 / 1000  MS (Java / Others)    Memory Limit:  65536 / 32768  K (Java / Others)
Total Submission(s): 
2613     Accepted Submission(s):  694


Problem Description
s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(
12 ) = 1 + 2 + 3 + 4 + 6 = 16 .如果任何
数m,s(m)都不等于n,则称n为不可摸数.
 

Input
包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(
2 <= n <= 1000 )是整数。
 

Output
如果n是不可摸数,输出yes,否则输出no
 

Sample Input
3
2
5
8
 

Sample Output
yes
yes
no

题目分析:
          标准的筛选法。求出每个数的因子和

然后看因子和是否在1000以内,是的话就证明等于因子和的这个数是不可摸数。

代码如下: (  奋斗哥代码    0rz................... )
#include  < iostream >
#include 
< string .h >
#include 
< cmath >
using   namespace  std;
 
int  sum[ 1000001 ], sign[ 1001 ];
int  main()
{
    
int  nCases, num;
    scanf(
" %d " & nCases);
    
for ( int  i  =   1 ; i  <=   500000 ++ i)
        
for ( int  j  =   2 * i; j  <=   1000000 ; j  +=  i)
            sum[j] 
+=  i;
    
for ( int  i  =   1 ; i  <=   1000000 ++ i)
        
if (sum[i]  <   1000 )
            sign[sum[i]] 
=   1 ;
 
    
while (nCases -- )
    {
        scanf(
" %d " & num);
        
if (sign[num])
            printf(
" no\n " );
        
else
            printf(
" yes\n " );
    }
    
return   0 ;
}

转载于:https://www.cnblogs.com/MiYu/archive/2010/08/18/1802749.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值