HDU 1999 不可摸数

/*

中文题意:

中文翻译:

题目大意:见红字(如下)

解题思路:打表,将每个数的合数之和存在一个数组之中

难点详解:用两个for循环写的,第二个for循环主要是解释两个数相乘不超过这个最大数的上限,下面的a[i*j]主要是用来记录合数之和,同时也保证了数组上限在最大值里面

关键点:求在1000以内合数之和,打表

解题人:lingnichong

解题时间:2014/7/31    17:52

解题感受:一开始错了几次,原因是数组开小了,后台数组很大,他又说对任意的m,所以数组要开很大才会满足题意,才会过。错了努力去修改

*/

不可摸数

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

Total Submission(s): 8447    Accepted Submission(s): 2183

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
#include<stdio.h>
#define MAXN 500000+10
int a[MAXN]={0};
int main()
{
	int n,t,i,j,m;
	for(i=1;i<MAXN;i++)
	for(j=1;j*i<MAXN;j++)
	a[i*j]+=i;
	scanf("%d",&t);
	while(t--)
	{
		m=0;
		scanf("%d",&n);
		for(i=1;i<MAXN;i++)
		{
			if(a[i]-i==n)
			m=1;
		}
		if(m==0)
		printf("yes\n");
		else
		printf("no\n");
	}
	return 0;
}

HDU 1999 不可摸数

时间: 2024-12-19 08:38:53

HDU 1999 不可摸数的相关文章

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

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

不可摸数(杭电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 不可摸数

不可摸数 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

hdu 1999

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

hdu 1565 方格取数(2)(网络流之最大点权独立集)

题目链接:hdu 1565 方格取数(2) 题意: 有一个n*m的方格,每个方格有一个数,现在让你选一些数.使得和最大. 选的数不能有相邻的. 题解: 我们知道对于普通二分图来说,最大独立点集 + 最小点覆盖集 = 总点数,类似的,对于有权的二分图来说,有: 最大点权独立集 + 最小点权覆盖集 = 总点权和, 这个题很明显是要求 最大点权独立集 ,现在 总点权 已知,我们只要求出来 最小点权覆盖集 就好了,我们可以这样建图, 1,对矩阵中的点进行黑白着色(相邻的点颜色不同),从源点向黑色的点连一