東大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;
}
相關文章
相關標籤/搜索