整数N的因子个数和N!的因子个数(数学问题)
2013-04-25 10:19
190 查看
N的因子个数:
条件:给定任意一个一个正整数N
要求:求其因子的个数
首先给出结论:对于任意的整型N,分解质因数得到N= P1^x1 * P2^x2* …… * Pn^xn;(p1,p2,p3...pn是质数2,3,5,7..........)
则N的因子个数M为 M=(x1+1) * (x2+1) * …… *(xn+1);
解析:如果N的因子的个数用上面的思路求的话,分解质因数的时候会非常麻烦,不仅最大的质因数不定,而且每个质因数的幂也不确定,所以在求N的因子个数的时候还是用基本的方法来求,i从1循环到N,判断N除以i取余是否为0,如果为0,因子个数加1
基本方法求N的因子个数的程序如下:
import java.util.Scanner;
//求整数N的因子的个数
public class YinZi {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int flag=0;//用来保存因子的个数
for(int i=1;i<=N;i++)
{
if(N%i==0)
flag++;
}
System.out.println(N+"的因子的个数为:"+flag);
}
}
N!的因子个数:
a. 最大的质因子一定不会大于N
b. N的质因子并不完全包含N!所有的质因子(例如:36的质因子为2,3,36!的质因子有,2,3,5,7......) N!的所有质因子是小于等于N的所有质数
思路:
用到上面求N的因子个数的思路
首先,我们可以把所有的N以内的质数给打表求出来
然后,求每一个质因子的指数个数,这里用到了一个公式,:
ei = [N/pi^1] + [N/pi^2] + …… + [N/pi^n] 其中[]为取整
例如:10!=1*2*3*4*5*6*7*8*9*10
ei=2=[N/2]+[N/4]+[N/8]=5+2+1;
1*2*3*4*5*6*7*8*9*10 10/2=5,说明10可以由5个2组成,也就是2+2+2+2+2,也就是2,4,6,8,10,但是ei 是2*4*6*8*10, 10/2=5代表5个数中分别包含了一个2, 以此类推,10/4=2 代表4,8 需要分别再加一个2, 10/8代表8需要再加一个2,直到10/16=0为止
最后,就是套公式计算了,M=(e1+1)*(e2+1)*……*(en+1)
N!的因子的个数的程序:
import java.util.Scanner;
/*求N!的因子的个数
* 步骤1.从控制台得到一个整数N
* 步骤2.求N以内的所有质数(用筛法)
* 步骤3.根据公式ei = [N/pi^1] + [N/pi^2] + …… + [N/pi^n] 其中[]为取整求每个质因数的幂
* 步骤4.根据公式M=(e1+1)*(e2+1)*……*(en+1)求得M值也就是因子的个数
* 步骤5.输出M的值
*/
public class YinZi2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//步骤1
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
//步骤2
int[] a=new int[N+1];
for(int i=2;i<N/2;i++)
{
if(a[i]==1) continue;
for(int j=2;j<=N/i;j++)
{
if(i*j<=N) a[i*j]=-1;
}
}
//步骤3,4
int M=1;
for(int i=2;i<=N;i++)
{
if(a[i]==0)
{
for(int j=1;j<=N/i;j++)
{
a[i]+=N/Math.pow(i, j);
}
M*=a[i]+1;
}
}
//步骤5
System.out.println(N+"的阶乘的因子的个数是:"+M);
}
}
条件:给定任意一个一个正整数N
要求:求其因子的个数
首先给出结论:对于任意的整型N,分解质因数得到N= P1^x1 * P2^x2* …… * Pn^xn;(p1,p2,p3...pn是质数2,3,5,7..........)
则N的因子个数M为 M=(x1+1) * (x2+1) * …… *(xn+1);
解析:如果N的因子的个数用上面的思路求的话,分解质因数的时候会非常麻烦,不仅最大的质因数不定,而且每个质因数的幂也不确定,所以在求N的因子个数的时候还是用基本的方法来求,i从1循环到N,判断N除以i取余是否为0,如果为0,因子个数加1
基本方法求N的因子个数的程序如下:
import java.util.Scanner;
//求整数N的因子的个数
public class YinZi {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int flag=0;//用来保存因子的个数
for(int i=1;i<=N;i++)
{
if(N%i==0)
flag++;
}
System.out.println(N+"的因子的个数为:"+flag);
}
}
N!的因子个数:
a. 最大的质因子一定不会大于N
b. N的质因子并不完全包含N!所有的质因子(例如:36的质因子为2,3,36!的质因子有,2,3,5,7......) N!的所有质因子是小于等于N的所有质数
思路:
用到上面求N的因子个数的思路
首先,我们可以把所有的N以内的质数给打表求出来
然后,求每一个质因子的指数个数,这里用到了一个公式,:
ei = [N/pi^1] + [N/pi^2] + …… + [N/pi^n] 其中[]为取整
例如:10!=1*2*3*4*5*6*7*8*9*10
ei=2=[N/2]+[N/4]+[N/8]=5+2+1;
1*2*3*4*5*6*7*8*9*10 10/2=5,说明10可以由5个2组成,也就是2+2+2+2+2,也就是2,4,6,8,10,但是ei 是2*4*6*8*10, 10/2=5代表5个数中分别包含了一个2, 以此类推,10/4=2 代表4,8 需要分别再加一个2, 10/8代表8需要再加一个2,直到10/16=0为止
最后,就是套公式计算了,M=(e1+1)*(e2+1)*……*(en+1)
N!的因子的个数的程序:
import java.util.Scanner;
/*求N!的因子的个数
* 步骤1.从控制台得到一个整数N
* 步骤2.求N以内的所有质数(用筛法)
* 步骤3.根据公式ei = [N/pi^1] + [N/pi^2] + …… + [N/pi^n] 其中[]为取整求每个质因数的幂
* 步骤4.根据公式M=(e1+1)*(e2+1)*……*(en+1)求得M值也就是因子的个数
* 步骤5.输出M的值
*/
public class YinZi2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//步骤1
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
//步骤2
int[] a=new int[N+1];
for(int i=2;i<N/2;i++)
{
if(a[i]==1) continue;
for(int j=2;j<=N/i;j++)
{
if(i*j<=N) a[i*j]=-1;
}
}
//步骤3,4
int M=1;
for(int i=2;i<=N;i++)
{
if(a[i]==0)
{
for(int j=1;j<=N/i;j++)
{
a[i]+=N/Math.pow(i, j);
}
M*=a[i]+1;
}
}
//步骤5
System.out.println(N+"的阶乘的因子的个数是:"+M);
}
}
相关文章推荐
- 关于整数的整数因子和问题的若干研究(数学)
- 整数因子分解问题
- 整数因子分解问题
- FJUT 3101 Home_W的简单问题3 数学 因子和问题
- 整数因子分解问题--递归--动态规划
- 整数因子分解问题
- 0048算法笔记——【随机化算法】拉斯维加斯随机化算法求解整数因子分解中的因子分割问题
- 整数划分问题(数学)
- 整数因子分解问题
- 整数因子分解问题
- FJUT 3101 Home_W的简单问题3 数学 因子和问题
- 数学——大整数问题
- FJUT 3101 Home_W的简单问题3 数学 因子和问题
- 钢管下料问题用非线性整数规划的数学模型来建模以及用Lingo进行计算
- 复试训练——数学问题—— 高精度整数
- 整数因子分解问题 SDUT
- FJUT 3101 Home_W的简单问题3 数学 因子和问题
- 整数因子分解问题
- 问题 A: 因子个数 【数学】
- FJUT 3101 Home_W的简单问题3 数学 因子和问题