2019 百度之星初赛第一场 Seq

题目名称:Seq

题目链接:Seq

Problem Description

度度熊有一个递推式 a n a_n an=( ∑ i = 1 n − 1 \sum_{i=1}^{n-1} i=1n1= a i a_i ai∗i)%n
其中 a 1 = 1 a_1=1 a1=1 。现给出 n,需要求 a n a_n an

Input

第一行输入一个整数 T,代表 T (1≤T≤100000) 组数据。
接下 T 行,每行一个数字 n (1≤n≤ 1 0 12 10^{12} 1012)。

Output

输出 T 行,每行一个整数表示答案

Sample Input

5
1
2
3
4
5

Sample Output

1
1
0
3
0

解题思路

这种题就是找规律的问题,先打印出来几千行数据,发现如下规律
在这里插入图片描述
例如
1 5 9 13
1 4 7 10
0 1 2 3
3 6 9 12
0 1 2 3
3 6 9 12
规律如上,即可编写代码

完整代码

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
#define N 100010
typedef long long ll;
int  t;
ll n;
ll a[N];

int main()
{
	a[1]=1;
	a[2]=1;
	a[3]=0;
	a[4]=3;
	a[5]=0;
	a[6]=3;
	
	cin>>t;
	while(t--){
		cin>>n;
		switch(n%6){
			case 1:cout<<n/6*4+1<<endl;break;
			case 2:cout<<n/6*3+1<<endl;break;
			case 3:cout<<n/6<<endl;break;
			case 4:cout<<n/6*6+3<<endl;break;
			case 5:cout<<n/6<<endl;break;
			case 0:cout<<n/6*3<<endl;break;
		}
	}
	
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值