3 条题解
-
1
-
核心结论:两个数的所有公因数,恰好就是它们最大公约数 (gcd) 的全部因数。
-
比如:12和18的最大公因数为6,6的全部因数为1,2,3,6,也就是12和18的全部公因数。
-
步骤:
- 算出 (g = \gcd(x,y))
- 找出数字 g 所有正因数
- 从小到大排序输出
代码如下:
#include<bits/stdc++.h>//万能头 using namespace std; typedef long long ll;//该题数字大于int的范围,用typedef使long long简写为ll; ll gcd(ll a,ll b){//找到a和b的最大公因数 while(b!=0){ ll t=a%b; a=b; b=t; } return a;//返回最大公因数的值 } int main(){ ll x,y; cin >>x >>y;//输入数据 ll g=gcd(x,y);//把返回值赋给g vector<ll> num;//用来储存g的因数 for(ll i=1;i*i<=g;i++){//一个数的因数对数不超过这个数的算术平方根 if(g%i ==0){//当i能被g整除时,i为g的因数 num.push_back(i);//把i添加进去 if(i!=g/i) num.push_back(g/i); //因为因数都是成对出现的,所以只要用g/i就能找到与i成对的数,但要避免相同因数(if(i!=g/i)) } } sort(num.begin(),num.end());//将因数从小到大排序 //输出: for(ll i=0;i<num.size();i++){ if(i!=0) cout<<" "; cout<<num[i]; } return 0; } -
-
1
#include<bits/stdc++.h> using namespace std; int main(){ long long a,b; cin>>a>>b; if((a%2!=0 || b%2!=0) && //这边的特判,用最朴素的方式拦截质数,不进入下面的暴力循环 (a%3!=0 || b%3!=0) && (a%5!=0 || b%5!=0) && (a%7!=0 || b%7!=0) && (a%11!=0 || b%11!=0) && (a%13!=0 || b%13!=0) && (a%17!=0 || b%17!=0) && (a%19!=0 || b%19!=0)){ cout<<1; return 0;//是质数直接输出1,并且推出 } for(long long i=1;i<=min(a, b);i++){ if(a%i==0 && b%i==0){ cout<<i<<" ";//暴力枚举 } } return 0; }可以80分,供参考
-
0
题意
- 给定两个正整数 和 ,求它们的所有公共因数,从小到大输出
- 公共因数指的是能够同时整除 和 的数
部分分
- 性质 1: 且 (35 分)
- 直接枚举 ,然后判定其是否可以被 和 整除
- 能够被整除,直接输出即可
- 性质 2: 或 (30 分)
- 【或】字意味着存在另一个数可能达到
- 第一点,用
long long读入 - 然后和上面一样写就行了,只不过枚举
- 性质 3: 或 是质数(15 分)
- 只需要判断 和 或者 和
- 那么直接判断三个数 就到手了
题解(全部得分,前置知识:素数判定的 写法)
-
简单的考虑,能够同时整除 和 那么可以先把所有能够整除 的数找出来
-
对于这些数判定其是否能够被 整除,能够就记录
-
最后排序输出
const int N = 1e6 + 9; // 因为一个数的因数个数不超过根号个,所以数组长度开根号(1e6)即可 long long ans[N]; void solved() { long long x, y; cin >> x >> y; // 对 x 计算所有的因数 int n = 0; for(long long i = 1; i * i <= x; i ++) { if(x % i != 0) continue; if(y % i == 0) ans[++ n] = i; if(i * i == x) continue; // 重复因子 if(y % (x / i) == 0) ans[++ n] = x / i; } sort(ans + 1, ans + n + 1); // 从小到大排序 for(int i = 1; i <= n; i ++) cout << ans[i] << ' '; return ; }
- 1
信息
- ID
- 166
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 88
- 已通过
- 12
- 上传者