中山市第十届小学生信息赛第五题——简单数学题

版权声明:本博客的博文版权为2018韦泽鑫所有,复制文章转载时记得附上本博客的地址哦 https://blog.csdn.net/qq_40167327/article/details/80100550

题目大意:在保证(n-0.5t)/(n-t)的情况下(n是已知的正整数),求出符合条件的t的个数及t的代表的数字

输入

输入仅一个数字,为n;

输出

输出t的个数及符合条件的t的代表的数字

数据范围

n在100000以内

思路:

这道题通过一系列的方程推导(这里不做太多解释)可得出:符合条件t都是n的因子。所以我们先求出n的因子,再去一个个判断就行了。

接下来直接上代码:

#include<cstdio>
#include<cstring>
#include<cmath>
long long int n,a[100005], b[100005];
int lb=0;
void px()
{
	int t=sqrt(n+1);
	for(int i=1;i<=t;i++)
	{
		if(n%i==0) b[++lb]=i;
	}
	for(int i=t-1;i>=2;i--)
	{
		if(n%i==0) b[++lb]=n/i;
	}
}
int main()
{
	scanf("%lld",&n);
	px();
	int ans=0;
	for(int i=1;i<=lb;i++)
	{
		ll t=n-b[i];
		if(t>0&&t/2*2==t&&(n-t/2)%(n-t)==0)
		{
			ans++;a[ans]=t;
		}
	}
	printf("%d",ans);
	for(int i=ans;i>=1;i--) printf(" %lld",a[i]);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40167327/article/details/80100550