HDU 1299分解素因子--唯一分解定理
2018-01-15 01:01
323 查看
题意:
求使不定方程1 / x + 1 / y = 1 / n成立的正整数解有多少个。
题解:
先说一下唯一分解定理的大概概念,即任何一个大于1的数字可以被n个素数相乘来表示。其主要有两条公式供大家使用:
(1)一个整数n可以表示为若干素数乘积: n = p1^a1 * p2^a2*…*pk^ak;(其中p1,p2…pk都是n的素数,且p1
求使不定方程1 / x + 1 / y = 1 / n成立的正整数解有多少个。
题解:
先说一下唯一分解定理的大概概念,即任何一个大于1的数字可以被n个素数相乘来表示。其主要有两条公式供大家使用:
(1)一个整数n可以表示为若干素数乘积: n = p1^a1 * p2^a2*…*pk^ak;(其中p1,p2…pk都是n的素数,且p1
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; #define LL long long int const int MAXN=40000+7; //40000*40000>1e9了,所以足够了 bool prime[MAXN]; int a[MAXN],m=0,n; void Prime() { prime[0]=prime[1]=false,prime[2]=true; for(int i=3;i<MAXN;i++) { if(i%2) prime[i]=true; else prime[i]=false; } for(int i=3;i<=sqrt(MAXN);i++) { if(prime[i]) for(int j=i+i;j<MAXN;j+=i) prime[j]=0; } for(int i=2;i<MAXN;i++) if(prime[i]) a[m++]=i; } int main() { Prime(); int k=1,t; scanf("%d",&t); while(t--) { scanf("%d",&n); LL ans=1; for(int i=0;i<m&&a[i]<=n;i++) { int num=0; while(n%a[i]==0) { num++; n/=a[i]; } ans*=(2*num+1); } if(n>1)//一定要加上这个条件,防止漏掉一个素数的情况,为什么是素数因为一个合数可以由多个素数组成,这个合数除去多个素数之后还大于1的话那肯定还是素数了。 ans*=3; printf("Scenario #%d:\n%lld\n\n",k++,(ans+1)/2); } }
相关文章推荐
- HDU 6069 Counting Divisors(唯一分解定理+因子数)
- HDU 3826 Squarefree number 唯一分解定理
- HDU 5428 质因数分解(唯一分解定理)
- NYOJ 476 谁是英雄(唯一素因子分解定理)
- HDU GT and numbers (整数的唯一分解定理)
- hdu 1215 求约数和 唯一分解定理的基本运用
- HDU 2053 Switch Game(开灯问题,唯一分解定理)
- Professor Ben 唯一分解定理:因子的因子个数
- HDU 1215 七夕节 【约数和定理&&唯一分解定理(模板)】
- HDU 1452 Happy 2004(唯一分解定理)
- POJ1845Sumdiv(求所有因子和 + 唯一分解定理)
- HDU-1215 七夕节 数论 唯一分解定理 求约数之和
- hdu 1299 数论 分解素因子
- [ACM] HDU 3398 String (从坐标0,0走到m,n且不能与y=x-1相交的方法数,整数唯一分解定理)
- HDU 1452 Happy 2004 (唯一分解定理 + 求等比数列前n项和)
- HDU 2608 - 0 or 1 (数论 + 唯一分解定理)
- 算术基本定理------比1大的整数N的素因子分解是唯一的
- GCD and LCM HDU - 4497 (唯一分解定理)
- HDU 4497 GCD and LCM(唯一分解定理+排列组合)
- hdu1299 素因子分解