Contest 2: Find all factors

本文介绍了一种计算任意正整数因子总数的有效算法。通过输入一个正整数N(1<=N<=9999999999999999),该算法能快速输出N的所有因子数量。例如,对于输入12和20,其因子数目分别为6。

Description

Output the number of total factors of an integer.

Input

There are several lines. And each line contains a positive number N (1<=N<=9999999999999999).

Output

Output the number of total factors for each N.
For example,
Input
12
20
Output
6
6
Because 1, 2, 3, 4, 6, 12 are factors of 12.
1,2,4,5,10,20 are are factors of 20.

Sample Input

12
20

Sample Output

6
6

HINT

#include <stdio.h>
#include <math.h>
 int main()
 {
     long int n, i,sq;
     int fac=0;
     while (scanf("%ld",&n)!=EOF)
     {   sq=sqrt(n);

         for(i=1;i<=sq;i++)
         {
              if(n%i==0)
                fac++;
         }
         fac*=2;
         float sqr=sq;
         if(sqr==sqrt(n))
            fac--;

     printf("%d\n",fac);
     fac=0;
     }
     return 0;
 }

c++14 ## 题目背景 Z 形管道猫正在研究如何高效发动《三国杀》中的“子鼠”。 ## 题目描述 子鼠:技能,您可以选择一名卡牌数大于您的其他角色,然后获得其的一张卡牌。 总共有 $n$ 名角色,您是第 $1$ 名角色。初始,第 $i$ 名角色有 $a_i$ 张卡牌。 请您求出只通过您发动任意次(可以零次)“子鼠”后,您的卡牌数的最大值。 ## 输入格式 每个测试点包含多组测试数据。第一行给定一个整数 $T(1\le T\le 10^4)$,表示测试数据组数。 对于每组测试数据:\ 第一行给定一个整数 $n(1\le n\le10^6)$,表示角色数。\ 第二行给定 $n$ 个整数 $a_i(0\le a_i\le10^9)$,其中第 $i$ 个整数 $a_i$ 表示初始第 $i$ 名角色的卡牌数。 保证在每个测试点中所有测试数据的 $n$ 的总和不超过 $10^6$。 ## 输出格式 对于每组测试数据,输出一行一个整数,表示只通过您发动任意次“子鼠”后,您的卡牌数的最大值。 ## 输入输出样例 #1 ### 输入 #1 ``` 2 3 0 3 1 4 0 2 3 0 ``` ### 输出 #1 ``` 2 2 ``` ## 说明/提示 对于样例的第一组测试数据: 您发动第一次“子鼠”:选择第 $2$ 名角色,然后获得其的一张卡牌。各角色的卡牌数变为 $\textbf{\color{red}1},\textbf{\color{red}2},1$。 您发动第二次“子鼠”:选择第 $2$ 名角色,然后获得其的一张卡牌。各角色的卡牌数变为 $\textbf{\color{red}2},\textbf{\color{red}1},1$。 因为此时没有卡牌数大于您的其他角色,所以您无法发动第三次“子鼠”。 可以证明,只通过您发动任意次“子鼠”后,您的卡牌数的最大值是 $2$。 对于样例的第二组测试数据: 您发动第一次“子鼠”:选择第 $3$ 名角色,然后获得其的一张卡牌。各角色的卡牌数变为 $\textbf{\color{red}1},2,\textbf{\color{red}2},0$。 您发动第二次“子鼠”:选择第 $2$ 名角色,然后获得其的一张卡牌。各角色的卡牌数变为 $\textbf{\color{red}2},\textbf{\color{red}1},2,0$。 因为此时没有卡牌数大于您的其他角色,所以您无法发动第三次“子鼠”。 可以证明,只通过您发动任意次“子鼠”后,您的卡牌数的最大值是 $2$。
11-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值