2 条题解
-
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
- 标签
- 递交数
- 78
- 已通过
- 10
- 上传者