方法一: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; }