P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
/*
a*b/最大公约数=最小公倍数
反推即可 当然会有别的组合满足
所以多加一下判断
*/
ll gcd(ll a,ll b){
ll c;
while(b){
c=a%b;
a=b;
b=c;
}
return a;
}
void solve(){
ll x1,x2,i,j,ans=0;
cin>>x1>>x2;
for(i=x1;i<=x2;i++){
if(i%x1||x2%i)continue;
ll a=(x1*x2)/i;
if(gcd(a,i)==x1)
ans++;
}
cout<<ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
t=1;
while(t--){
solve();
}
}
P1414 又是毕业季II - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
/*
先对数组预处理,把每个树分解因子,并标记每种因子出现的数量
对第i行,输出最大的一个因子数量大于等于i的即可
*/
ll gcd(ll a,ll b){
ll c;
while(b){
c=a%b;
a=b;
b=c;
}
return a;
}
map<int,int>mp;
void fen(ll x){
for(int i=1;i*i<=x;i++){
if(x%i==0){
mp[i]++;
if(i*i==x){
continue;
}
mp[x/i]++;
}
}
}
ll dd[100000];
void solve(){
ll n,i,j,u=1;
cin>>n;
for(i=0;i<n;i++){
cin>>dd[i];
fen(dd[i]);
}
ll sum=0;
for(auto it=mp.rbegin();it!=mp.rend();it++){
sum=it->second;
while(sum>=u){
// cout<<sum<<" "<<u<<endl;
cout<<it->first<<endl;
u++;
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
t=1;
while(t--){
solve();
}
}