zoukankan      html  css  js  c++  java
  • 不可摸数


    title: 不可摸数
    tags: [acm,杭电]
    categories: acm

    题目连接

    题意

    如果是不可摸数就输出yes,如果是可摸数就输出no,题目中的测试数据8是一个可摸数,输出no,因为10的真因子之和是1+2+5=8所以8是可摸数。

    分析

    题意是给出一个数n判断有没有任何一个数m,m的真因子之和是n的,如果有输出no没有输出yes假设m的真因子之和是s(m),如果s(m)=1000,那么m的值有可能比1000大得多,如果要求得所有的数的真因子之和,把这些真因子之和保存下来,输入n,然后判断n是否在这这些真因子之和中。因为题目给的范围是2到1000,一个数的真因子之和是一千,而这个数是非常大的。

    代码

    
    #include <stdio.h>
    int M= 500050;
    int moshu[1010];
    long long int a[500050];//为什么这么大,因为500050以内的数的真因子之和才包括1000
    void qiumoShu()//打表
    {
        int i,j,m;
        m = M/2;
        for (i=1; i<=m; ++i)//仔细看,这种方法类似于筛选法求素数
            for (j=i+i; j<M; j+=i)
                a[j] += i;
        for (i=0; i<M; i++)
            if (a[i]<=1000)
                moshu[a[i]] = 1;//把真因子之和小于1000的标记下来
    }
    
    int main ()
    {
        int a, i, N;
        scanf ("%d", &N);
        qiumoShu();
        while (N --)
        {
            scanf ("%d", &a);
            if (moshu[a])//如果有一个数的真因子之和==a;
              
                printf ("no
    ");
            else
                printf ("yes
    ");
    
        }
        return 0;
    }
    
    
    
    
  • 相关阅读:
    成为JAVA(高级)工程师
    JVM的内存区域划分以及垃圾回收机制
    XML
    String.valueOf
    JAVA书籍(2)
    JAVA书籍(1)
    深入JAVA线程池
    FileWriter与BufferedWriter
    获取下拉框的文本或值
    删除字符串最后一个字符的几种方法
  • 原文地址:https://www.cnblogs.com/dccmmtop/p/6710434.html
Copyright © 2011-2022 走看看