C++n题目描述n本题中我们定义一个整数的因数和为它的所有因数之和。比如:6-的因数和为-1-+-2-+-3-+-6-=-12-。nn现在给你一个整数-n你需要找出所有同时满足如下两个条件的整数对-a-和-b:nn①-1-≤-a--b-≤-nn②-a-的因数和是-b-的倍数同时-b-的因数和是-a-的倍数n输入n一个整数-n3-≤-n-≤-10000。n输出n输出若干行每行包含两个整数-a-和-b以一个空格分隔。要求按照-a-从小到大a-相同时-b-从小到大的顺序输出所有数对方案。nn样例输入-
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=1e4+5;
int n;
int prime[MAXN],tot;
bool not_prime[MAXN];
void get_prime(){
for(int i=2;i<=n;i++){
if(!not_prime[i])prime[++tot]=i;
for(int j=1;j<=tot&&prime[j]i<=n;j++){
not_prime[prime[j]i]=1;
if(i%prime[j]==0)break;
}
}
}
int sum(int x){
int ans=1;
for(int i=1;i<=tot&&prime[i]<=x;i++){
int p=prime[i],cnt=0;
while(x%p==0)x/=p,cnt++;
if(cnt)ans=((ll)pow(p,cnt+1)-1)/(p-1);
}
if(x!=1)ans=x+1;
return ans;
}
int main(){
cin>>n;
get_prime();
vector
原文地址: https://www.cveoy.top/t/topic/p45 著作权归作者所有。请勿转载和采集!