HDU 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`
题目分析:
首先要弄明白不可摸数的概念:任何数m,s(m)都不等于n,则称n为不可摸数而s(m)表示的是数m的真因子之和
然后还要考虑到一点就是说即使当前的数m的值很大,但是m的真因子之和也有可能很小,所以求值时m的值要比实际要求大很多。
这个是完全正确的代码
#include <stdio.h>
int M= 500050;
int moshu[1010];
long long int a[500050];
void qiumoShu()//函数用于求不可摸数
{
int i,j,m;
m = M/2;//虽然要求的m的值小于1000就好,但是即使m很大相对应的s(m)的值可能很小
for (i=1; i<=m; ++i)
for (j=i+i; j<M; j+=i)
a[j] += i;//每个只要是当前i的倍数的值都要加上i
for (i=0; i<M; i++) //吧小于1000的不可摸数都标记出来
if (a[i]<=1000)
moshu[a[i]] = 1;
}
int main ()
{
int a, i, N;
scanf ("%d", &N);
qiumoShu();
while (N --)
{
scanf ("%d", &a);
if (moshu[a])
printf ("no\n");
else
printf ("yes\n");
}
return 0;
}
这个代码错误,明显的思路就解释不通,就是那个标记点的问题,还有就是数组范围太小了开大也肯定会超时的,但是可能是测试数据太弱啦,竟然提交也能过,希望注意一下:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
int i,j,n,m,flag=0;//标记放这里就行
int a[5000]= {0};
a[0]=1;
a[1]=1;
for(i=2; i<5000; i++)
{
a[i]=0;
for(j=1; j<=i/2; j++)
if(i%j==0)
a[i]+=j;
}
cin>>n;
while(n--)
{
cin>>m;
//flag=0 //标记如果在这里重置为0的话就WA
for(i=0; i<=1000; i++)
{
if(m==a[i])
{
flag=1;
break;
}
}
if(flag==0) //问题
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
return 0;
}
HDU 1999 不可摸数 (模拟)的更多相关文章
- hdu 1999 不可摸数 水题。
不可摸数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1999 不可摸数
/* 中文题意: 中文翻译: 题目大意:见红字(例如以下) 解题思路:打表,将每一个数的合数之和存在一个数组之中 难点具体解释:用两个for循环写的,第二个for循环主要是解释两个数相乘不超过这个最大 ...
- hdu 1999 不可摸数 筛选素数 两次打表
不可摸数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1999 不可摸数【类似筛法求真因子和】
不可摸数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU - 1999 不可摸数,快速求因子和
题意:定义s[m]为m内的因子的和,给定一个n,判断是否有s[m]==n,若没有,则是不可摸数. 思路:首先要打表求出s[m]的值,标记这些出现过的值. 打表求因子和: for(int i=1;i&l ...
- 不可摸数 【杭电-HDOJ-1999】 附题
/* hdu 1999 不可摸数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HUD-1999-不可摸数
参考博客https://www.cnblogs.com/dongsheng/archive/2012/08/18/2645594.html Problem Description s(n)是正整数n的 ...
- HDOJ-1999 不可摸数
不可摸数 转自:http://www.cnblogs.com/dongsheng/archive/2012/08/18/2645594.html Time Limit: 2000/1000 MS (J ...
- 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...
随机推荐
- QLayout窗口布局
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QLayout窗口布局 本文地址:http://techieliang.com/201 ...
- Spring 中常用注解原理剖析
前言 Spring 框架核心组件之一是 IOC,IOC 则管理 Bean 的创建和 Bean 之间的依赖注入,对于 Bean 的创建可以通过在 XML 里面使用 <bean/> 标签来配置 ...
- 学习websocket-SignalR,MVC中使用SignalR打造酷炫实用的即时通讯
http://www.cnblogs.com/Leo_wl/p/4793284.html http://www.fangsi.net/archives/1144.html
- Streaming Big Data: Storm, Spark and Samza--转载
原文地址:http://www.javacodegeeks.com/2015/02/streaming-big-data-storm-spark-samza.html There are a numb ...
- 洛谷 P4585 [FJOI2015]火星商店问题 解题报告
P4585 [FJOI2015]火星商店问题 题目描述 火星上的一条商业街里按照商店的编号\(1,2,\dots,n\) ,依次排列着\(n\)个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非 ...
- Function.caller, arguments.caller, arguments.callee, arguments.callee.calller
Function.caller指向当前函数的调用者,是arguments.caller的替代者 arguments.caller也是指向当前函数的调用者,已被废弃 arguments.callee是对 ...
- APIO2017
商旅 在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴.你被这个城市发达而美丽的市场所 深深吸引,决定定居于此,做一个商人.科巴有个集市,集市用从1到N的整数编号,集市之间通过M条 ...
- Machine Learning in Action-chapter2-k近邻算法
一.numpy()函数 1.shape[]读取矩阵的长度 例: import numpy as np x = np.array([[1,2],[2,3],[3,4]]) print x.shape / ...
- qq快速登陆
http://www.cnblogs.com/1996V/p/7481823.html qq快速登陆
- ELK Betas 6.0安装及使用
Betas 6.0安装及使用 注意: Elastic官网更新非常的快,每个版本的文档有会有不同,具体需要去官网查看最新文档进行配置调整. Beats 平台集合了多种单一用途数据采集器.这些采集器安装后 ...