不可摸数
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6240 Accepted Submission(s): 1619
Problem Description
s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何
数m,s(m)都不等于n,则称n为不可摸数.
数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
解题思路:暴力破解,先打表,再标记;
打表:
int i , j , sum ,count = 0 ;
memset(a , 0 , sizeof(a));
for(i = 1; i <= 500000 ; i++)
{
sum = 0 ;
for(j = 1 ; j < i ; j++)
{
if((i % j) == 0)
sum += j;
if(sum > 1000)
j = i;
}
if(sum >= 2 && sum <= 1000)
{
if(a[sum] != 1)
{
a[sum] = 1;
count ++;
}
}
}
cout << count << endl;//在1000以内,总共有887个是可摸数;
for(i = 2; i <= 1000 ; i++)//打表;
{
if(a[i] != 1)
{
cout << i <<" , ";
count++;
if(count % 8 == 0)
cout << endl;
}
}
在1000以内不可摸数:
2 ,5 , 52 , 88 , 96 , 120 , 124 , 146 , 162 ,
188 , 206 , 210 , 216 , 238 , 246 , 248 , 262 ,
268 , 276 , 288 , 290 , 292 , 304 , 306 , 322 ,
324 , 326 , 336 , 342 , 372 , 406 , 408 , 426 ,
430 , 448 , 472 , 474 , 498 , 516 , 518 , 520 ,
530 , 540 , 552 , 556 , 562 , 576 , 584 , 612 ,
624 , 626 , 628 , 658 , 668 , 670 , 708 , 710 ,
714 , 718 , 720 , 726 , 728 , 732 , 738 , 748 ,
750 , 752 , 756 , 758 , 762 , 766 , 768 , 770 ,
782 , 784 , 788 , 792 , 802 , 804 , 818 , 822 ,
828 , 836 , 840 , 848 , 852 , 864 , 872 , 882 ,
892 , 894 , 896 , 898 , 902 , 908 , 912 , 920 ,
926 , 930 , 934 , 936 , 938 , 948 , 964 , 966 ,
968 , 976 , 982 , 984 , 992 , 996 , 998
#include <iostream>
#include <cstring>
using namespace std;
int b[1001];
int main()
{
int a[115]={2 ,
5 , 52 , 88 , 96 , 120 , 124 , 146 , 162 ,
188 , 206 , 210 , 216 , 238 , 246 , 248 , 262 ,
268 , 276 , 288 , 290 , 292 , 304 , 306 , 322 ,
324 , 326 , 336 , 342 , 372 , 406 , 408 , 426 ,
430 , 448 , 472 , 474 , 498 , 516 , 518 , 520 ,
530 , 540 , 552 , 556 , 562 , 576 , 584 , 612 ,
624 , 626 , 628 , 658 , 668 , 670 , 708 , 710 ,
714 , 718 , 720 , 726 , 728 , 732 , 738 , 748 ,
750 , 752 , 756 , 758 , 762 , 766 , 768 , 770 ,
782 , 784 , 788 , 792 , 802 , 804 , 818 , 822 ,
828 , 836 , 840 , 848 , 852 , 864 , 872 , 882 ,
892 , 894 , 896 , 898 , 902 , 908 , 912 , 920 ,
926 , 930 , 934 , 936 , 938 , 948 , 964 , 966 ,
968 , 976 , 982 , 984 , 992 , 996 , 998
};
int i;
memset(b, 0 , sizeof(b));
for(i = 0 ; i < 114 ; i++)//是不可摸数,标记;
b[a[i]] = 1;
int T;
while(cin >> T)
{
while(T--)
{
int n;
cin >> n;
if(b[n] == 1)
cout <<"yes" << endl;
else
cout <<"no" << endl;
}
return 0;
}
return 0;
}