题目链接:http://acm.tju.edu.cn/toj/showp1868.html
Time Limit: 0.5 Seconds Memory Limit: 65536K
Total Runs: 2691 Accepted Runs: 855
The Problem
Write a program, that computes the number of different prime factors in a positive integer.
The Input
The input tests will consist of a series of positive integers. Each number is on a line on its own. The maximum value is 1000000. The end of the input is reached when the number 0 is met. The number 0 shall not be considered as part of the test set.
Output
The program shall output each result on a line by its own, following the format given in the sample output.
Sample Input
289384 930887 692778 636916 747794 238336 885387 760493 516650 641422 0
Sample Output
289384 : 3 930887 : 2 692778 : 5 636916 : 4 747794 : 3 238336 : 3 885387 : 2 760493 : 2 516650 : 3 641422 : 3
Source: UVA
#include <stdio.h>
#include <string.h>
#define Max 1000000+5
using namespace std;
int prime[Max];
bool isprime[Max];
int main(){
int n,sum,count=0;
memset(isprime,true,sizeof(isprime));
isprime[0]=isprime[1]=false;
for(int i=2;i<=Max/2;i++)
if(isprime[i]){
for(int j=i<<1;j<=Max;j+=i)
isprime[j]=false;
prime[count++]=i;
}
while(scanf("%d",&n)&&n>0){
printf("%d : ",n);
sum=0;
for(int i=0;i<count&&prime[i]<=n;++i){
if(n%prime[i]==0)
sum++;
while(n%prime[i]==0)
n/=prime[i];
}
printf("%d\n",sum);
}
}