月老的烦恼(1)

时间限制:1000 ms  |           内存限制:65535 KB
难度:3
 
描述

月老最近遇到了一个很棘手的问题,就是“剩男”“剩女”急速增长,而自己这边又人手不足导致天天都得加班。现在需要你来帮助月老解决这个问题,牵红绳的规则很简单:每个男生都一个编号n(1<=n<=500000),编号n的因数之和就是要牵线的女生的编号。

如20的因子是:1,2,4,5,10;

 
输入
输入数据的第一行是一个数字T(1<=T<=500000),它表明测试数据的组数.然后是T组测试数据,每组测试数据只有一个数字N(1<=N<=500000).
输出
对于每组测试数据,请输出一个代表输入编号N男生的另一半的编号.
样例输入
3
2
10
12
样例输出
1
8
16
上传者
路过这

//自己的代码:

 #include <stdio.h>
#define MAX 500001
int s[MAX]={,};
int main()
{
int T;
int i,j;
s[]=s[]=s[]=;
for(j=;j<MAX;j+=)
{
s[j]=;
for(i=;i*i<j;i++)
if(j%i==)
s[j]+=(i+j/i);
if(i*i==j)
s[j]+=i;
}
for(j=;j<MAX;j+=)
{
s[j]=;
for(i=;i*i<j;i+=)
if(j%i==)
s[j]+=(i+j/i);
if(i*i==j)
s[j]+=i;
}
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
printf("%d\n",s[n]);
}
return ;
}

//网上找的优秀代码

//筛选法不仅可以用来找素数,还可以用来求因子
#include<stdio.h>
#define max 500000
int a[max+]={};
int main()
{
int t,n,i,j;
a[]=a[]=;
for(i=;i<=max/;i++)
for(j=i+i;j<=max;j+=i)//若i为n的因子,则n必为i的倍数,故以i为步长
a[j]+=i;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%d\n",a[n]);
}
return ;
}

最新文章

  1. JAVA中最常用的十个快捷键
  2. ASP.NET MVC图片管理(删除)
  3. 代码管理工具之git的学习
  4. [Android]Unit Test for Android
  5. fs/ext2/inode.c相关函数注释
  6. 操作12864(ST7920控制器)
  7. spring:ContextLoaderListener接口
  8. 浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)
  9. salesforce零基础学习(七十七)队列的实现以及应用
  10. Python 中的继承、多态和封装
  11. 《团队-OldNote-项目总结》
  12. Entity Framework Core系列之DbContext(删除)
  13. EChart 猜猜乐
  14. mac安装linux双系统的吐槽
  15. baiduTemplate.js 百度JS模板引擎
  16. Codeforces 862B (二分图染色)
  17. 如何获取类或属性的自定义特性(Attribute)
  18. python+Django框架运用(四)
  19. Alamofire源码导读四:统计信息
  20. (三)Hololens Unity 开发之 语音识别

热门文章

  1. 你真的懂SDWebImage?
  2. App上架流程 &amp; 上架被拒10大原因
  3. vue实现全选,反选
  4. python自动化测试学习笔记-6urllib模块&amp;request模块
  5. ACM_小游戏(棋盘博弈)
  6. Sqoop架构(四)
  7. JS高级——面向对象方式解决歌曲管理问题
  8. CSS——新浪导航demo
  9. Ruby开发环境的搭建
  10. C# GridView使用方法