题意:等式 1 / x + 1 / y = 1 / n (x, y, n ∈ N+ (1) 且 x <= y) ,给出 n,求有多少满足该式子的解。(1 <= n <= 1e9)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1299

分析:x,y肯定都满足 n<x<=y; 设 x = n + k; 带入上式得 :1/y = k/(n2+n*k); 即 k要整除 (n2+n*k); 又 k 一定整除 n*k; 即求 k 整除 n2; 即求 n2 的因数个数。

注意:   1.数据范围太大,不能直接分解n2

2.利用唯一分解定理的推论求因数个数:对于一个数n,由唯一分解定理得x=a1^k1*a2^k2...*an^kn.(ai为素数)。

则x的因子个数为(k1+1)*(k2+1)*...*(kn+1)。

    3.推出:x2=(a1^k1*a2^k2......*an^kn)2. 则 n2的因子个数为 (2*k1+1)*(2*k2+1)*......*(2*kn+1)。

    4.又x<=y, 则 ans=(ans+1)/2;(ans是n^2的因数个数)。

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<cmath>
 6 using namespace std;
 7 #define ll long long
 8 #define mx 100000
 9 int prime[mx];
10 int vis[mx];
11 void getprime()
12 {
13     int m=sqrt(mx+0.5);
14     for(int i=2;i<=m;i++)
15     {
16         if(!vis[i])
17         {
18             for(int j=i*i;j<mx;j+=i)
19                 vis[j]=1;
20         }
21     }
22     int cnt=0;
23     for(int i=2;i<mx;i++)
24         if(!vis[i])
25            prime[cnt++]=i;
26 }
27 int fun(int num)
28 {
29     int ans=1;
30     int qs=sqrt(num+0.5);
31     //cout<<qs<<endl;
32     for(int i=0;prime[i]<=qs;i++) //设a=n+x,b=n+y。得到n^2=x*y
33     {
34         int cnt=0;
35         while(!(num%prime[i])&&num>1)
36         {
37             num/=prime[i];
38             cnt++;
39         }
40         ans*=(2*cnt+1);    //注意:由于n的范围比较大,所以我们不能直接将n^2分解,
41     }                      //我们可以通过分解n从而得知n^2分解的情况,由此计算答案
42     if(num!=1)
43         ans*=3;
44     return ans;
45 }
46 int main()
47 {
48    getprime();
49    int t;
50    scanf("%d",&t);
51    for(int k=1;k<=t;k++)
52    {
53        int n;
54        scanf("%d",&n);
55        int ans=fun(n);
56        printf("Scenario #%d:\n%d\n\n",k,(ans+1)/2);
57    }
58    return 0;
59 }

转载于:https://www.cnblogs.com/tristatl/p/6012571.html

HDOJ Problem - 1299相关推荐

  1. 杭电OJ分类题目(3)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...

  2. BZOJ1299 [LLH邀请赛]巧克力棒

    怎么又是博弈论...我去 Orz hzwer,这道题其实是可以转化成Nim游戏的! "第一步: 先从n根巧克力棒中取出m(m>0)根,使得这m根巧克力棒的xor和为0,同时使得剩下的n ...

  3. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

  4. 杭电OJ分类题目(2)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(2) HDU Water~~~ HDU 100 ...

  5. 杭电OJ分类题目(1)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(1) HDU Introduction HDU ...

  6. 伊格纳修斯的难题 Ignatius‘s puzzle

    问题描述: <p> <a href="http://acm.hdu.edu.cn/showproblem.php?pid=1098" target="_ ...

  7. android 仿qq修改头像,Qt:小项目仿QQ修改头像界面,技术点记录

    最近写了一个修改头像功能的UI,布局参考了QQ目前的修改头像界面.如下图 这里主要说明一下两个地方的技术:1.头像图片上层的遮罩层,圆形外部为灰色,内部为全透明:2.上传图片宽高比例可以通过鼠标拖拽移 ...

  8. HDOJ 5373 The shortest problem 【数论】

    HDOJ 5373 The shortest problem [数论] 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5373 题目给一个初始数据和重复 ...

  9. mutiset HDOJ 5349 MZL's simple problem

    题目传送门 1 /* 2 这题可以用stl的mutiset容器方便求解,我对这东西不熟悉,TLE了几次,最后用读入外挂水过. 3 题解有O(n)的做法,还以为我是侥幸过的,后来才知道iterator ...

  10. HDOJ 1000A + B Problem最短代码探索

    0x00 前言 这道题估计是HDOJ里最简单的了,不亦要挑战的是怎样用最短的代码AC它. 看了下HDOJ支持的编程语言,有C.C++.Java.Pascal和C#,对比了下,在这个场景C语言应该是最短 ...

最新文章

  1. 社会生活中常用的14条著名法则
  2. 黑客解锁微信一键洗白、删好友、批量实名认证功能!38 名“海贼王”被判刑...
  3. sklearn特征的提取(下)
  4. 一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对
  5. .NET Core 时代已经到了,你准备好了吗
  6. webserver之处理HTTP请求
  7. angularjs directive2
  8. Cards and Joy CodeForces - 999F (贪心+set)
  9. C++基础:第五章 表达式基础与详述
  10. lammps教程:create_box 命令详解
  11. python入门神器下载_Python编程神器 v3.7.2 最新免费版
  12. gmp 5.0.1 windows 下编译使用
  13. 剖析 Chrome 的小恐龙游戏
  14. WDF驱动简介及几个驱动对象介绍
  15. wps教程 如何恢复文档
  16. Flutter 布局报错The following assertion was thrown during performLayout():
  17. 应用网易轻舟,德邦快递核心系统入选云原生应用十大优秀案例
  18. python 定时器,每天凌晨3点执行方法
  19. Appium+python自动化(六)- 连接模拟器并启动淘宝APP(超详解)
  20. 大话2口袋版不显示服务器,大话西游2新口袋版操作指引及常见问题说明

热门文章

  1. shell之BASH_SOURCE
  2. 最全电商分类信息(04)
  3. win10系统迁移后系统重装_Win10如何把系统迁移到固态硬盘上?Win10系统迁移到SSD上教程...
  4. 最经典的人生定律、法则、效应总结
  5. ps不更改原图比例,调整图片至任意尺寸
  6. Synonyms,一个开源的中文近义词工具包
  7. Excel开发入门(C#和C++实例)
  8. 什么是SDN,为什么要有SDN,SDN有什么安全问题
  9. 外贸独立站平台十大排名-找到最合适的外贸平台
  10. matlab鼠标截取图像并显示_matlab图像剪裁命令imcrop()