codevs 2964 公共素数因数

老博客内容 专栏收录该内容
49 篇文章 0 订阅

提交地址: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

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值