题目描述 Description
小单同学刚学习了一个数分解成几个素数(也叫质数)因子相乘的知识。
例如:12=2*2*3;25=5*5;144=2*2*2*2*3*3······等,比如,第一个表达式,说明12这个整数可以分解出2、2、3这三个质数因子。老师给他布置了一个作业,小单看来看去,怎么都不会做,只好虚心求教各位同学(他自己睡觉去了!)
问题是这样的:已知两个正整数a,b;请问a,b相同的素(质)因子有几个。请输出个数。例如:12与144 相同的素(质)因子为2,2,3;则输出3。12与25 相同的素(质)因子没有;则输出0。
输入描述 Input Description
第一行两个数:a,b,中间用一个空格分隔。
输出描述 Output Description
一个整数,表示a和b相同的素(质)因子个数。
样例输入 Sample Input
12 144
样例输出 Sample Output
3
数据范围及提示 Data Size & Hint
对于50%的数据,保证2≤a,b≤100
对于100%的数据,保证2≤a,b≤10000
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 3 using namespace std; 4 5 int n,m,ans; 6 7 int prime(int n) 8 { //求素数,大家都知道吧? 9 int i; 10 if (n==1 || n==0)return 0; 11 if (n==2)return 1; 12 for(i=2;i*i<n;i++) 13 if(n%i==0)return 0; 14 if(i*i==n)return 0; 15 return 1; 16 } 17 18 int solve() 19 { //求公因数 20 int a=n,b=m,c=a%b; 21 while(c!=0){ //辗转相除法 22 a=b; 23 b=c; 24 c=a%b; 25 } 26 return b; 27 } 28 29 void work(int n) 30 { //求给n,m的公因数分解,然后判断如果是质数,那么就+1 31 int i=2; 32 while(n!=1){ 33 if(n%i==0 && prime(i)==1){ans++;n/=i;} 34 else i++; 35 } 36 cout<<ans<<endl; //输出 37 } 38 39 int main(){ 40 int s; 41 cin>>n>>m; //读入 42 s=solve(); 43 work(s); 44 return 0; 45 }