您的位置:首页 > 其它

SGU 105 Div 3(数论)

2016-04-14 09:10 246 查看
Description

有一个序列1,12,123,1234,…,12345678910, … ,先给出一整数n,问这个序列前n项中有多少项可以整除3

Input

一个整数n(1<=n<=2^31-1)

Output

输出这个序列前n项中整除3的项数

Sample Input

4

Sample Output

2

Solution

以a
表示该序列第n项

a[1]%3=1,a[2]%3=0,a[3]%3=0

a
=[n*(n+1)/2]%3=[(n-3)(n-2)/2+3(n-1)]%3=[(n-3)*(n-2)/2]%3=a[n-3]%3

进而有a[3*n+1]%3=1,a[3*n+2]%3=a[3*n]%3=0

故前n项中整除3的项数ans=n/3*2+(n%3==2)

Code

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
printf("%d\n",n/3*2+(n%3==2));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: