1519 - 质因数的个数
时间限制 : 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)