题目链接

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 不可摸数 (模拟)的更多相关文章

  1. hdu 1999 不可摸数 水题。

    不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. HDU 1999 不可摸数

    /* 中文题意: 中文翻译: 题目大意:见红字(例如以下) 解题思路:打表,将每一个数的合数之和存在一个数组之中 难点具体解释:用两个for循环写的,第二个for循环主要是解释两个数相乘不超过这个最大 ...

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

    不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. HDU 1999 不可摸数【类似筛法求真因子和】

    不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. HDU - 1999 不可摸数,快速求因子和

    题意:定义s[m]为m内的因子的和,给定一个n,判断是否有s[m]==n,若没有,则是不可摸数. 思路:首先要打表求出s[m]的值,标记这些出现过的值. 打表求因子和: for(int i=1;i&l ...

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

    /* hdu 1999 不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. HUD-1999-不可摸数

    参考博客https://www.cnblogs.com/dongsheng/archive/2012/08/18/2645594.html Problem Description s(n)是正整数n的 ...

  8. HDOJ-1999 不可摸数

    不可摸数 转自:http://www.cnblogs.com/dongsheng/archive/2012/08/18/2645594.html Time Limit: 2000/1000 MS (J ...

  9. 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)

      HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...

随机推荐

  1. [LeetCode] Search in Rotated Array

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  2. [CF1111D]Destroy the Colony

    题目大意:有一个长度为$n(n\leqslant10^5,n=0\pmod2)$的字符串,字符集大小为$52$,有$q(q\leqslant10^5)$次询问,每次询问第$x,y$个字符在这个字符串的 ...

  3. 【JQuery】文档操作

    一.前言 接着上一章的内容,接着JQuery的学习 二.内容 addClass 向被选元素添加一个或多个类 $(selector).addClass(class) $(selector).addCla ...

  4. Netsh命令-修改网络IP设置

    原文链接地址:https://blog.csdn.net/qq_38054198/article/details/77990914 静态设置IP 修改IP地址addr和子网掩码mask: \>n ...

  5. BZOJ2212 [Poi2011]Tree Rotations 【线段树合并】

    题目链接 BZOJ2212 题解 一棵子树内的顺序不影响其与其它子树合并时的答案,这一点与归并排序的思想非常相似 所以我们只需单独处理每个节点的两棵子树所产生的最少逆序对即可 只有两种情况,要么正序要 ...

  6. POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)

    POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...

  7. HDU1863畅通工程---并查集+最小生成树

    #include<cstdio> #include<algorithm> #define MAX 105 struct edge { int from,to; long lon ...

  8. MapReduce(一) mapreduce基础入门

    一.mapreduce入门 1.什么是mapreduce 首先让我们来重温一下 hadoop 的四大组件:HDFS:分布式存储系统MapReduce:分布式计算系统YARN: hadoop 的资源调度 ...

  9. 【DP】CF859C Pie Rules

    https://www.luogu.org/problemnew/show/CF859C Description 有一个长度为\(n\)的序列,Alice和Bob在玩游戏.Bob先手掌握决策权. 他们 ...

  10. 手脱ASPack v2.12

    1.PEID查壳提示为: ASPack 2.12 -> Alexey Solodovnikov 2.载入OD,程序入口点是一个pushad,在他的下一行就可以进行ESP定律,下硬件访问断点然后s ...