zoukankan      html  css  js  c++  java
  • 七夕节

    好巧啊,今天正好七夕。

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

    数字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

    本来是从2~n/2的,(ˇˍˇ) 想来也该TLE,果然不粗所料,于是换了sqrt,AC了,蛋是这种方法比较耗时,还一种打表的方法也可以。

    #include <iostream>
    #include
    <math.h>
    using namespace std;
    int main(void)
    {
    int T,n,i,j,sum;
    cin
    >>T;
    while(T--)
    {
    cin
    >>n;
    int k=int(sqrt(double(n)));
    sum
    =1;
    for(i=2; i<=k; i++)
    {
    if(n%i==0)
    {
    sum
    +=i;
    j
    =n/i;
    if(i!=j)
    sum
    +=j;
    }
    }
    cout
    <<sum<<endl;

    }
    }

    这种打表的方法耗时不多,不过占内存稍微多一些,别人的代码 :)

    #include <iostream>
    using namespace std;
    int a[500001];
    int main()
    {
    int m,n,i,j;
    for(i=1; i<=500000; i++) /////1每个人都有先加上去
    a[i]=1;
    for(i=2; i<=250001; i++) //只要一半就好,超过了连除2都不可能,就更别说因子了
    {
    for(j=i+i; j<=500000; j+=i) ////只要是i的倍数的数肯定含有i这个因子,i自身就不加了,从i的下个开始
    {
    a[j]
    +=i;
    //所以加i上去
    }
    }
    scanf(
    "%d",&m);
    while(m--)
    {
    scanf(
    "%d",&n);
    printf(
    "%d\n",a[n]);
    }
    return 0;
    }
  • 相关阅读:
    php 框架选择
    转:从框架看PHP的五种境界及各自的薪资待遇(仅限于二三线城市,一线除外)
    百度云怎样提升下载速度
    .net体系与java体系
    绘制3D的js库
    Canvas游戏计算机图形教程
    Unity Manual 用户手册
    在windows系统下安装oracle 11g
    Three.js学习笔记
    php面试题之二——数据结构和算法(高级部分)
  • 原文地址:https://www.cnblogs.com/aboutblank/p/2129290.html
Copyright © 2011-2022 走看看