约数

#include<cstdio>
#include<cmath>
int slove(int x)
{
	int res,k,c,i;
	res=1;k=int(sqrt(x*1.0));i=1;
	while(++i<=k)
	{
		if(x%i) continue;
		c=1;
		do
		{
			x/=i,c++;
		}while(x%i==0);
		res*=c;
	}
	if(x>1) res<<=1;
	return res;
}
int sum(int x)
{
	int res,k,s,c,i;
	res=1;k=int(sqrt(x*1.0));i=1;
	while(++i<=k)
	{
		if(x%i) continue;
		s=c=1;
		do
		{
			x/=i,c*=i,s+=c;
		}while(x%i==0);
		res*=s;
	}
	if(x>1) res*=(x+1);
	return res;
}
int main()
{
	int x;
	scanf("%d",&x);
	printf("%d %d
",slove(x),sum(x));
	return 0;
}//约数个数与和
原文地址:https://www.cnblogs.com/lxyzxzy/p/13584354.html