1519 - 质因数的个数

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB
求正整数N(N>1)的质因数的个数。
相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。

题目输入

可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。

题目输出

对于每组数据,输出N的质因数的个数。

输入/输出样例

输入格式

120
200

输出格式

5
5

C语言解答

#include<stdio.h>    
int main()
{
    int i,j,b,a[3500],n,m,flag,sum;
	m=0;
	for(i=2;i<=31623;i++)
	{
        a[0]=2;
		flag=1;        
		for(j=0;j<=m;j++)
		{
			if(i%a[j]==0)
				flag=0;
		}
		if(flag)
		{
			m++;
			a[m]=i;
		}
	}
    while(scanf("%d",&n)!=EOF&&n)
    {
		sum=0;
        for(i=0;i<=m;i++)
        {
            while(n%a[i]==0)
            {
                n/=a[i];
                if(n!=1)sum++;
                if(n==1){sum++;break;}
            }
        }
        if(n>31623)sum++;
		printf("%d\n",sum);
    }
    return 0;
}

C++解答

#include<stdio.h>
#include<math.h>

int main ()
{
	long long n,i,k;
	while(scanf("%lld",&n)!=EOF)
	{
		for(k=0,i=2;i<=sqrt(n);i++)
			while(n%i==0)
			{
				k++;
				n/=i;
			}
		if(n!=1)
			k++;
		printf("%lld\n",k);
	}
	return 0;
}

Java解答



import java.util.Scanner;

public class Main{
   private static Scanner s= new Scanner(System.in) ;
   
   public static void main(String[] args) {
	   while(s.hasNext()){
	      long N = s.nextInt() ;
	      int k = 1 ;
	      if(N<1000000000&&N>1){
	    	  for (int i = 2; i < N; i++) {
				if(N%i==0){
					k++ ;
					N=N/i ;
					i-- ;
				}
				
			   }
	     System.out.println(k) ;
	      }
	     
	   }
   }
}

Python解答

# coding=utf-8
import math
while True:
    n=int(input())
    cnt=0
    for i in range(2,int(math.sqrt(n))+1):
        while n%i==0:
            n//=i
            cnt+=1
    if n>1:
        cnt+=1
    print(cnt)