七夕节 (HDU - 1215) 【简单数论】【找因数】

标签: 入门讲座题解 数论


题目描述

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

人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:



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

题意

给定一个\(n\),找到它的全部因数(除了它本身),相加和是多少?


解析

  • 朴素做法就是循环一遍比\(n\)小的数,然后看看每个\(i\)是否是\(n\)的因数(n % i == 0),如果是的话就加上。但是这么做的时间复杂度是\(O(n)\),显然,对于这道题这么大的数据量是过不了的。

  • 优化一下。我们发现对于一个数的因数而言,除了完全平方数落在\(\sqrt{n}\)的因数以外,都是成对出现的。那么我们其实只要在\([2, \sqrt{n}]\)范围内找因数就可以了,找到一个因数,另一个因数做除法就也找到了。这样的时间复杂度是\(O(\sqrt{n})\),对于这道题是可以通过的。


通过代码

/*
Problem
HDU - 1215
Status
Accepted
Time
312ms
Memory
1360kB
Length
667
Lang
G++
Submitted
2019-11-25 14:23:52
RemoteRunId
31628051
*/ #include <bits/stdc++.h>
using namespace std; inline int read() //快读,读入速度比scanf()快.当输入数据量较大时,使用快读可以明显加快程序速度.
{
int res = 0;
char ch; ch = getchar(); while(!isdigit(ch)){
ch = getchar();
} while(isdigit(ch)){
res = (res << 3) + (res << 1) + ch - 48;
ch = getchar();
} return res;
}
int main()
{
int times; times = read(); while(times --){
int n, ans = 1;
n = read();
for(int i = 2; i * i <= n; i ++) //只要在[2,sqrt(n)]内找因数即可.
if(n % i == 0){
if(n / i != i)
ans += i + n / i;
else
ans += i; //注意出现完全平方数的sqrt(n)因子时,只加一次即可.
} printf("%d\n", ans);
}
return 0;
}

七夕节 (HDU - 1215) 【简单数论】【找因数】的更多相关文章

  1. HDU——1215七夕节(因数和)

    七夕节 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  2. hdu 1215 七夕节

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

  3. HDU 1215.七夕节【筛选法】【7月26】

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

  4. 数学--数论--HDU 12151七夕节 Plus (因子和线性筛)

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

  5. 数学--数论--HDU 12151七夕节

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

  6. 【HDOJ 1215】七夕节

    七夕节 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissio ...

  7. HDOJ 1215 七夕节

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

  8. Least Common Multiple (HDU - 1019) 【简单数论】【LCM】【欧几里得辗转相除法】

    Least Common Multiple (HDU - 1019) [简单数论][LCM][欧几里得辗转相除法] 标签: 入门讲座题解 数论 题目描述 The least common multip ...

  9. (step7.2.1)hdu 1395(2^x mod n = 1——简单数论)

    题目大意:输入一个整数n,输出使2^x mod n = 1成立的最小值K 解题思路:简单数论 1)n可能不能为偶数.因为偶数可不可能模上偶数以后==1. 2)n肯定不可能为1 .因为任何数模上1 == ...

随机推荐

  1. SpringBoot 项目运行在 tomcat7 上

    SpringBoot 项目如何打成 war 包 SpringBoot项目的默认打包方式是将工程打包成为一个 jar 包.部分情况下,我们需要将项目打包成一个 war 包,以方便我们将工程部署在 tom ...

  2. angular8自定义管道、指令以及获取dom值

    版本: 1.自定义管道: example: 定义一个*ngFor 可以获取key值的管道 keyObject.pipe.ts // key value 管道 import { Pipe, PipeTr ...

  3. Vue-cli脚手架 安装 并创建项目--命令

    检查是否有 node - v 安装Vue-cli npm install -g vue-cli 安装好后,执行 vue list可以看到很多实用的模板,我这里实用的webpack 初始化模板 vue ...

  4. 关于字符串的格式化----format与%

    格式化字符串一般有两种方法 1.%(d整数,s字符,f浮点数) 2.format 用处极为广泛且限制不多 注意:第一种对于数组的传递会报TypeError,所以必须传递数组 a = (1, 2, 3) ...

  5. buildroot教程

    什么是buildroot Buildroot是Linux平台上一个开源的嵌入式Linux系统自动构建框架. 0.下载buildroot Buildroot版本每2个月,2月,5月,8月和11月发布一次 ...

  6. VS2017初学者如何打开右侧的解决方案资源管理器

  7. 洛谷 SP263 Period

    洛谷 SP263 Period 题目描述 For each prefix of a given string S* with N* characters (each character has an ...

  8. C语言程序设计100例之(18):火柴棒等式

    例18   火柴棒等式 用n根火柴棍,可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棒拼出的整数(若该数非零,则最高位不能是0).用火柴棒拼数字0~9的拼法如图1所示. 图1  用 ...

  9. python - selenium模块简介

    为什么要使用Selenium? 很多浏览器渲染页面的方式都很难找出其规律, 但是利用Selenium来驱动加载网页就可以直接拿到javaScript渲染后的结果了, 不需要再担心其相关的加密系统 声明 ...

  10. Python之format()函数

    Python2.6开始,新增了一种格式化字符串的函数format(),它增强了字符串的格式化功能.(官方推荐) 基本语法是通过{}和:来代替以前的% format()函数可以接收不限个参数,位置可以不 ...