博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1215 七夕节 因数和
阅读量:3903 次
发布时间:2019-05-23

本文共 1149 字,大约阅读时间需要 3 分钟。

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

第一种方法跟素数筛法的原理差不多。。。

代码如下:

#include 
#include
#include
#include
#include
#include
using namespace std;const int maxn=500005;int a[maxn];int t,n;void yinzi(){ for (int i=1;i<=maxn-5;i++) for (int j=i<<1;j<=maxn-5;j+=i) a[j]+=i;}int main(){ yinzi(); scanf("%d",&t); while (t--) { scanf("%d",&n); printf("%d\n",a[n]); } return 0;}

 第二种方法是直接暴力。。。

虽然能过,但是耗时太长。。。

代码如下:

#include 
#include
#include
#include
#include
#include
using namespace std;const int maxn=500005;int t,n;int ans;int main(){ scanf("%d",&t); while (t--) { scanf("%d",&n); ans=0; for (int i=1;i<=sqrt(n);i++) { if(n%i==0) { ans+=i; if(i*i!=n) ans+=(n/i); } } printf("%d\n",ans-n); } return 0;}

 

转载地址:http://qxaen.baihongyu.com/

你可能感兴趣的文章
Ubuntu下adb无法识别android设备的解决方法
查看>>
使用U盘安装Ubuntu系统的实践小结
查看>>
编译cscope-15.8a遇到的问题与解决方案
查看>>
ubuntu下海信Hisense E920 usb连接不上的处理与adb的连接
查看>>
findbugs的ant脚本实践
查看>>
Ubuntu 12.04 安装 Subversion 1.7
查看>>
scp port 22: Connection refused
查看>>
ubuntu12.04命令行下安装RabbitVCS
查看>>
自定义cscope-index
查看>>
(ubuntu)在andorid andk工程中使用ccache加速编译速度
查看>>
android graphics system学习资料汇总
查看>>
GDB
查看>>
Oracle RAC Failover 详解
查看>>
[转载]Oracle RAC客户端连接不稳定的解决方法
查看>>
ORA RAC ORA-12545:因目标主机或对象不存在,连接失败!
查看>>
证明两节点能正常failover的sql
查看>>
oracle10g rac 报ora-12545错误的解决方案 转载
查看>>
Linux配置Xmanager
查看>>
IP地址正则表达式
查看>>
对SOAP消息头的处理
查看>>