zoukankan      html  css  js  c++  java
  • HDU 1215

    今天碰到一题有趣的水题~~

    先上题目:

    七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!"
    人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:

        大概意思:给出一个数字N,然后把这个数的 因子 全部相加起来,然后输出。

    数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6.
    你想知道你的另一半吗?

    Input输入数据的第一行是一个数字T(1<=T<=500000),它表明测试数据的组数.然后是T组测试数据,每组测试数据只有一个数字N(1<=N<=500000).


    Output对于每组测试数据,请输出一个代表输入数据N的另一半的编号.


    Sample Input

    3
    2
    10
    20
    Sample Output

    1
    8
    22


    一开始的思路是直接暴力求解,就是一个个数字去试下看看能不能整除,能就加上。当时想着应该是道水题应该不会怎么为难我,嗯,超时了~

    后面想到 貌似和求素数有些相似之处,就按这个思路走了下去,AC了。下面上思路:

      先建立一个数组。

      然后首先 1肯定能被 大于等于1的数整出,所以每一个数都加上1。

      之后 2 肯定能被它的倍数所整除 所以每一个2的倍数都加上2

      再然后 3 肯定也能被它的倍数所整除 所以每一个3的倍数都加上3

      以此类推..........

      最后,输出的值就是对应 表中的数值就对了。

      下面上代码:

    #include<iostream>
    using namespace std;
    #define inf 500001
    int a[inf];
    
    int main()
    {
        for (int i = 1; i < inf; i++) {
            for (int j = i * 2; j < inf; j += i) {
                a[j] += i;
            }
        }
        int n;
        cin >> n;
        while (n--)
        {
            int x;
            cin >> x;
            cout << a[x] << endl;
        }
        return 0;
    }
  • 相关阅读:
    解决Mac下GDB提示签名错误
    hdu 5015 大数量反复类似操作问题/ 矩阵高速幂
    数据运营报表系统思考 一二
    NGUI 3.5教程(二)Label 标签 (Hello world)、多行文本
    STL 源代码剖析 算法 stl_algo.h -- equal_range
    java字符操作获取汉字的拼音以及其它经常使用工具
    SRAM,SDRAM,网卡
    java.lang.NoClassDefFoundError: ognl/PropertyAccessor解决的方法
    纯手工定制西服怎么鉴别
    缝份_百度百科
  • 原文地址:https://www.cnblogs.com/caibingxu/p/9937352.html
Copyright © 2011-2022 走看看