F(X)--c#求解-英雄会在线编程题目

先看题目:

F(X)

  • 发布公司:
  • 有 效 期:
  • 赛 区:
  • CSDN
  • 2014-04-16至2015-04-16
  • 北京
  • 难 度 等 级:
  • 答 题 时 长:
  • 编程语言要求:
  • 120分钟
  • C C++ Java C#

题目详情

我们定义 F(x)是满足 x  mod(a*b) == 0这样的a,b的组数。现在给你一个n,你需要求出 F(n)

输入格式:

多组数据,每组第一行有一个整数n, 0 < n <= 10^11。

输出格式:

每组输出一行,满足条件的(a,b)对数

答题说明

输入样例

1

2

3

4

输出样例:

1

3

3

6

解释

第一组: (1,1)

第二组:  (1,1) (1,2) (2, 1)

第三组:  (1,1) (1,3) (3,1)

第四组:   (1,1) (1,2) (1, 4) (2, 1) (2,2) (4,1)

解题思路:

对于数n,f(n)=1+不包含1的约数个数*2+不包含1和本身的约数个数,那么这道题就转化为求解n的约数个数

求n的约数个数,可以先把n分解成质因数的乘积,比如6=2*3,8=2*2*2,360=2*2*2*3*3*5

这样就又转换成从几个集合中取若干个的可能性。

举例来说:360分解成了3个集合p[2]=3,p[3]=2,p[5]=1

第一个集合有3个,第二个集合有2个,这两个集合合并形成新的集合=集合一+集合二+集合一*集合二,(3+2+3*2)=11

第三个集合和新集合合并,按照上述计算方式计算(11+1+11*1)=23

。。。。。

360的不包含1的约数个数=23个

所以f(360)=1+23*2+23-1=23*3=69

这里需要注意,1属于特例,直接返回1

代码如下:

public static int run(long n)
        {
            if (n == 1)
                return 1;
            int count = 0;
            long x = n;
            Dictionary<long, int> primeList = new Dictionary<long, int>();
            int i = 2;
            #region 分解质因数集合
            while (x > 1)
            {
                if (i * i > x)
                {
                    if (primeList.ContainsKey(x))
                    {
                        primeList[x]++;
                    }
                    else
                    {
                        primeList.Add(x, 1);
                    }
                    break;
                }
                if (x % i == 0)
                {
                    if (primeList.ContainsKey(i))
                    {
                        primeList[i]++;
                    }
                    else
                    {
                        primeList.Add(i, 1);
                    }
                    x /= i;
                }
                else
                {
                    i++;
                }
            }
            #endregion

            foreach (KeyValuePair<long, int> kvp in primeList)
            {
                count = count + kvp.Value + count * kvp.Value;
            }
            count = count * 3;
            return count;
        }
        

F(X)--c#求解-英雄会在线编程题目

时间: 2024-08-05 07:05:01

F(X)--c#求解-英雄会在线编程题目的相关文章

火车调度-c#求解-英雄会在线编程题目

题目: 火车调度 返回首页 发布公司: 有 效 期: 赛 区: CSDN 2014-04-30至2015-04-30 北京 难 度 等 级: 答 题 时 长: 编程语言要求: 120分钟 C C++ Java C# 题目详情 火车从A地和B地之间运行,你知道火车从某地出发的时间和到达某地的时间(这个时间出发,一定这个时候到达).火车到达目的地后,不能立刻返回,需要经过t分钟检修才可以返回.列车只在A.B两地运行.你知道每天内的时刻表,求A,B两地各需要存放多少辆列车,才能满足这个时刻表?即只要该

另类编辑距离-c#求解-英雄会在线编程题目

Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果我们要把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象,我们应该怎么做呢? 一. 生成对象的原始模式 假定我们把猫看成一个对象,它有"名字"和"颜色"两个属性. var C

网易云课堂_C++程序设计入门(下)_期末考试_期末考试在线编程题目

期末考试在线编程题目 返回考试 本次考试题目一共两个,在考试期间可以不限制次数地提交 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成绩. 1 编写一个模板类型的 max 函数,求取三个输入的数据中最大的一个,将其输出(10分) 题目内容: 编写一个模板类型的max函数,该函数接收三个参数,返回其中最大的一个. 在主函数中接受键盘输入的三个数据(用空格分隔),并且将最大的一个值输出到屏幕上(

微软2014实习生及校招秋令营技术类职位,在线编程题目及解答。

题目1 : String reorder 时间限制:10000ms 单点时限:1000ms 内存限制:256MB Description For this question, your program is required to process an input string containing only ASCII characters between '0' and '9', or between 'a' and 'z' (including '0', '9', 'a', 'z'). Y

【编程题目】n 个骰子的点数

67.俩个闲玩娱乐(运算).2.n 个骰子的点数.把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 S.输入 n,打印出 S 的所有可能的值出现的概率. 思路:用递归把每个骰子的可能情况变量,记录各种和S出现的次数 比上 总情况数就是概率 /* 67.俩个闲玩娱乐(运算). 2.n 个骰子的点数. 把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 S.输入 n, 打印出 S 的所有可能的值出现的概率. */ #include <stdio.h> #include <stdlib.

编程题目分类(剪辑)

1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代数 13. 组合问题 14. 数论 15. 网格,几何,计算几何 [编程入门] PC 110101, uva 100, The 3n+1 problem, 难度 1 PC 110102, uva 10189, Minesweeper, 难度 1 PC 110103, uva 10137, The T

【平安科技】在线编程大赛活动

1. 活动名称:[现金大奖]平安科技在线编程大赛:一份"奇妙"的银行流水 题目详情: 一份银行流水数据,因打印模糊导致部分金额不清楚. 收入.支出.余额满足以下3条规则: 1.收入.支出.余额三列都是数字 2.同一行收入和支出的值不能同时为非零值 3.第N-1行余额(+第N行收入或-第N行支出)=第N行余额 程序语言: java 请按照规则编写算法,修复不清楚的值 输入描述: 输入数据最多25行,每行都包含四个数据,分别是:数据编号,收入.支出.余额,模糊的数据以?表示,它们之间以;隔

第五届在线编程大赛月赛第一题:完全平方数的个数

第五届在线编程大赛月赛第一题:完全平方数的个数 题目详情: 给定整数区间[A,B]问其中有多少个完全平方数. 输入格式: 多组数据,包含两个正整数A,B 1<=A<=B<=2000000000. 输出格式: 每组数据输出一行包含一个整数,表示闭区间[A,B]中包含的完全平方数的个数. 答题说明: 输入样例 1 1 1 2 3 10 3 3 输出样例: 1 1 2 0 java代码: import java.util.Scanner; public class One { public s

在四川大学的第三个冠军在线编程竞赛:簿传输

好久没有写日志,奇怪的是很特别的更近,最近参加的编程方面是CSDN在学院俱乐部的在线编程插头.说到编程大赛.一共有三个问题.标题都能够csdn学院看到俱乐部.比赛有点紧张时,,第三个问题涉及到队列,提示,坑...也怨自己平时写代码用惯了代码提示,非常多stl的方法都是隐隐约约知道,可是详细的不知道,导致第三题没有做出来,遗憾哈!以下贴一下今天写的第三题的代码 题目 四川大学线下编程比赛第三题:书本转移 题目详情: 小强有 3 个箱子 A,B,C 用来装书,全部的书(一共n本)都按序号由小到大的顺