codevs 2964 公共素数因数

提交地址:http://codevs.cn/problem/2964/

2964 公共素数因数

 

 时间限制: 1 s
 空间限制: 32000 KB
 题目等级 : 白银 Silver
 
 
 
题目描述 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

 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 }
View Code

 

posted @ 2016-05-22 16:37  月沫  阅读(158)  评论(0编辑  收藏  举报