HDU1999 不可摸数 【数论】

不可摸数

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 8354    Accepted Submission(s): 2148

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

被这题虐了千百遍- - 打表将s(n)的值在1000以内的全部找出来,数组开到100万就行的原因是sqrt(100万)=1000,所以若m大于100万,若它是素数的话s(m)=1,否则s(m)>1000;这样一来s(m)在1000以内的数就全部覆盖了。

#include <stdio.h>
#include <string.h>
#define maxn 1002

int arr[maxn], sum[1000002];

int main()
{
	int n, ok, t, i, addSum = 0, mulSum = 1, j;
	for(i = 1; i <= 500000; ++i){
		for(j = i + i; j <= 1000000; j += i)
			sum[j] += i;
	}
	for(i = 1; i <= 1000000; ++i)
		if(sum[i] <= 1000) arr[sum[i]] = 1;
	scanf("%d", &t);
	while(t--){
		scanf("%d", &n);
		if(arr[n]) printf("no\n");
		else printf("yes\n");
	}
	return 0;
}

HDU1999 不可摸数 【数论】

时间: 2024-10-12 03:56:14

HDU1999 不可摸数 【数论】的相关文章

hdu 1999 不可摸数 水题。

不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7966    Accepted Submission(s): 2024 Problem Description s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何数m,s(m)都不等于n,则称n为不可摸数. Input 包

hdu 1999 不可摸数 筛选素数 两次打表

不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8590    Accepted Submission(s): 2242 Problem Description s(n)是正整数n的真因子之和.即小于n且整除n的因子和.比如s(12)=1+2+3+4+6=16.假设不论什么 数m,s(m)都不等于n,则称n为不可摸数. Inp

不可摸数

不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10585    Accepted Submission(s): 2734 Problem Description s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何 数m,s(m)都不等于n,则称n为不可摸数. Inpu

不可摸数(杭电1999)

/*不可摸数 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 */ /*用打表法将 n的真因子

HDU 1999 不可摸数

/* 中文题意: 中文翻译: 题目大意:见红字(如下) 解题思路:打表,将每个数的合数之和存在一个数组之中 难点详解:用两个for循环写的,第二个for循环主要是解释两个数相乘不超过这个最大数的上限,下面的a[i*j]主要是用来记录合数之和,同时也保证了数组上限在最大值里面 关键点:求在1000以内合数之和,打表 解题人:lingnichong 解题时间:2014/7/31    17:52 解题感受:一开始错了几次,原因是数组开小了,后台数组很大,他又说对任意的m,所以数组要开很大才会满足题意

HDU 1999 不可摸数 (水题)

[题意简述]:中文题 [分析]:想法很简单,因为n的范围仅仅是  2<= n<=1000,所以根据题目描述,我只需要打出一个表即可解决问题,表里存放每一个S(i)的值,如果输入的n能与表中的值相对应,就不是不可摸数,相反便是不可摸数! 不过要注意这里边表的那个上线,我们可以试出来,最后我测试出的结果是5000左右. #include<iostream> using namespace std; int a[5000]={0}; int main() { int n,i,j,m,fl

hdoj 1999 不可摸数 【数学】

题意:... 简单来说,就是要找出50万以内的数的真因子之和,再做个标记 代码: #include <stdio.h> #include <string.h> #define M 500000 int a[M]; int ok[M]; void f() { int i, j; for(i = 1; i < M; i ++){ for(j = 1; j*i < M; j ++){ a[i*j]+=i; } } for(i = 1; i < M; i ++){ a[i

不可摸数 【杭电-1999】 附题

/* hdu 1999 不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8274    Accepted Submission(s): 2122 Problem Description s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何 数m,s(m)都不等于n,则称n

hdu 不可摸数

不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8417    Accepted Submission(s): 2176 Problem Description s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何 数m,s(m)都不等于n,则称n为不可摸数. Input