hdu1492(约数个数定理)

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

这里先讲一下约数个数定理:

对于正整数x,将其质因分解为 x = pow(p1, a) * pow*(p2, b) * pow(p3, c) * ...

则其约数个数为:num(x) = (a+1) * (b+1) * (c+1) *...

推导:

由约数定义可知p1^a1的约数有:p1^0, p1^1, p1^2......p1^a1 ,共(a1+1)个;同理p2^a2的约数有(a2+1)个......pk^ak的约数有(ak+1)个。

故根据乘法原理:n的约数的个数就是(a1+1)(a2+1)(a3+1)…(ak+1)。

那么这道题直接代这个公式好啦~

题意:

给出一个64bit的数,求它的约数的个数;

代码:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #define ll long long
 4 using namespace std;
 5
 6 int main(void){
 7     ll n;
 8     while(scanf("%lld", &n)&&n){
 9         int a[4]={1, 1, 1, 1};
10         int b[4]={2, 3, 5, 7};
11         for(int i=0; i<4; i++){
12             while(n%b[i]==0){
13                 a[i]++;
14                 n/=b[i];
15             }
16         }
17         printf("%d\n", a[0]*a[1]*a[2]*a[3]);
18     }
19     return 0;
20 }
时间: 2024-07-30 23:47:50

hdu1492(约数个数定理)的相关文章

【线性筛】【筛法求素数】【约数个数定理】URAL - 2070 - Interesting Numbers

素数必然符合题意. 对于合数,如若它是某个素数x的k次方(k为某个素数y减去1),一定不符合题意.只需找出这些数. 由约数个数定理,其他合数一定符合题意. 就从小到大枚举素数,然后把它的素数-1次方都排除即可. #include<cstdio> #include<cmath> using namespace std; #define MAXP 1000100 #define EPS 0.00000001 typedef long long ll; ll L,R; bool isNo

算法:约数个数定理

约数个数定理的百度百科解释

【搜索】【约数个数定理】[HAOI2007]反素数ant

对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数. 所以,n以内的反质数即为不超过n的约数个数最多的数. 怎样计算约数个数? 约数个数定理:对于一个大于1正整数n可以分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,则n的正约数的个数就是(a1+1)(a2+1)(a3+1)…(ak+1) .其中a1.a2.a3…ak是p1.p2.p3,…pk的指数. 所以,只需枚举一个数的所

约数个数定理

对于一个大于1正整数n可以分解质因数: n=p1^a1*p2^a2*p3^a3*-*pk^ak, 则n的正约数的个数就是(a1+1)(a2+1)(a3+1)-(ak+1) . 其中p1,p2,p3,-pk都是n的质因数; a1.a2.a3-ak是p1.p2.p3,-pk的指数. 原文地址:https://www.cnblogs.com/adelalove/p/9015899.html

BZOJ 3994 [SDOI2015]约数个数和 (神定理+莫比乌斯反演)

3994: [SDOI2015]约数个数和 Time Limit: 20 Sec  Memory Limit:128 MB Submit: 239  Solved: 176 [Submit][Status][Discuss] Description 设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Output T行,每行一个整数,表示你所求的答案. Sample Input 2 7

数论线性筛总结 (素数筛,欧拉函数筛,莫比乌斯函数筛,前n个数的约数个数筛)

线性筛 线性筛在数论中起着至关重要的作用,可以大大降低求解一些问题的时间复杂度,使用线性筛有个前提(除了素数筛)所求函数必须是数论上定义的积性函数,即对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数,若a,b不互质也满足的话则称作完全积性函数,下面说明每个筛子是怎么筛的. 最基础的是素数筛,其它三个筛都是以素数筛为前提 素数筛 void get_prime() { int pnum = 0; for(int i = 2;

bzoj 3629 [JLOI2014]聪明的燕姿——约数和定理+dfs

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3629 如果要搜索,肯定得质因数分解吧:就应该朝这个方向想. **约数和定理: 对于任意一个大于1的正整数N可以分解正整数:N=P?^a? P?^a?-Pn^an,则由约数个数定理可知N的正约数有(a?+1)(a?+1)(a?+1)-(an+1)个,那么N的(a?+1)(a?+1)(a?+1)-(an+1)个正约数的和为f(N)=(P?^0+P?^1+P?^2+-P?^a?)(P?^0+P?

hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 小明系列故事--未知剩余系 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 889    Accepted Submission(s): 207 Problem Description "今有物不知其数,三三数之有二,五五数之有三,七七数之有

JLOI 2014--聪明的燕姿(DFS&amp;约数和定理)

写完这道题感觉人生都是灰暗的... 不存在的!!!数学学得好就知道自己等的人是谁? 这是不不不不不可能的!!!我到现在都没有女朋友!!! 题意 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排着队拿着爱的号码牌 城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁.可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数