东大ACM 1430 Prime Factors

Prime Factorsphp

方法一:node

一、计算出100000之内的全部素数,存在连表里;ios

二、而后针对每个case:spa

(1)遍历链表,针对链表中的每个素数,看可否整除,能则质因子数目加1;code

(2)输出质因子个数。递归

#include<iostream>
#include<malloc.h>
using namespace std;

typedef struct node{
	unsigned n;
	struct node *next;
}listNode;

listNode *lxh_getPrime(unsigned maxNum){
	unsigned i, flag;
	listNode *head, *p, *r;
	p = (listNode *)malloc(sizeof(listNode)); p->n = 2;
	head = p; r = p;
	for(i=3; i<=maxNum; i++){
		flag = 1;
		p=head;
		while(1){
			if(i%p->n==0){
				flag = 0;
				break;
			}
			if(p==r)break;
			p=p->next;
		}
		if(flag == 1){
			p = (listNode *)malloc(sizeof(listNode)); p->n = i;
			r->next = p; r = p;
		}
	}
	r->next = NULL;
	return head;
}

int main(){
	unsigned num, count;
	listNode *head, *p;
	head = lxh_getPrime(100000);
	while(cin>>num){
		count = 0;
		for(p=head; p!=NULL; p=p->next){
			if(p->n > num) break;
			if(num%p->n == 0) count += 1;
		}
		cout<<count<<endl;
	}
}


方法二:递归ci

#include<iostream>
using namespace std;

void func(unsigned i, unsigned &num, unsigned &count){
	if(i>num) return;
	if(num%i==0){
		count += 1;
	}
	while(num%i==0) num/=i;
	func(i+1, num, count);
}

int main(){
	unsigned num, count;
	while(cin>>num){
		count = 0;
		func(2, num, count);
		cout<<count<<endl;
	}
	return 0;
}
相关文章
相关标签/搜索