問題はこちら
No.311 z in FizzBuzzString - yukicoder
a:「3の倍数かつ5の倍数」1個につきzが4個
b:「5の倍数でない3の倍数」1個につきzが2個
c:「3の倍数でない5の倍数」1個につきzが2個
ところで1つ目の条件はバラして2つ目と3つ目にまとめることができ
B:「3の倍数」1個につきzが2個
C:「5の倍数」1個につきzが2個 となる
(Bはbに加え、15の倍数の時もカウントされる。Cとcも同様なので、結局15の倍数の時は4個が計上される)
ということで求める答えは(floor(N/3)+floor(N/5))*2
最大ケースでは約16/15*10^18となるので、64bitで収まる
int main(){ long n; scanf("%ld%d%d%d",&n); printf("%ld",(n/3+n/5)*2); return 0; }
*2の代わりにbitshiftを使うとカッコが外せる
long n;main(){n=scanf("%ld",&n)>printf("%ld",n/3+n/5<<1);}
58B