牛客-繞圈遊戲(找規律,等差數列)

題目:題目鏈接
題解:
找規律
當n = 16 時

k=1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
k=2 1 3 5 7 9 11 13 15
k=4 1 5 9 13
k=8 1 9
k=16 1

只要找到k的約數就可以防止不重複
求sum發現是滿足等差數列

#include<bits/stdc++.h>
using namespace std;
const int inf= 0x3f3f3f3f;
typedef long long ll;
set<ll>ans;
set<ll>cn;
int main()
{
	ll n;
	cin>>n;
	for(ll i=1;i*i<=n;i++)
	{
		if(n%i==0)
		{
			cn.insert(i);
			cn.insert(n/i);
		}
	}
	set<ll>::iterator it = cn.begin();
	while(it!=cn.end())   //首項爲1 公差爲cn 最大項小於n的前n項和 
	{
		ll k = n/(*it);        //有k項 
		ans.insert(k+(*it)*k*(k-1)/2);
		it++;
	}
	it = ans.begin();
	printf("%d",*it);
	it++;
	while(it!=ans.end())
	{
		printf(" %lld",*it);
		it++;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章