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