BOJ 5615
λ¬Έμ
μννΈ μλ μ±κ³΅λ€κ΅μ΄
λ¬Έμ
λκ·λΆλμ°μμ μννΈλ₯Ό μλνκ³ μλ€. μννΈμ λ°©μ μλ κ·Έλ¦Όκ³Ό κ°μ΄ λ©΄μ μ΄ 2xy + x + yμ΄λ€. (xμ yλ μμ μ μ)

λκ·λΆλμ°μ μΉ΄νλ‘κ·Έμλ μννΈμ λ©΄μ μ΄ μ€λ¦μ°¨μμΌλ‘ μ νμ Έ μμ§λ§, μ΄ μ€ μΌλΆλ μμ μ μλ ν¬κΈ°μ μννΈμ΄λ€. λ§μ½, μ΄λ° ν¬κΈ°μ μννΈλ₯Ό μλνκ² λ€κ³ λ§νλ©΄, λκ·λ κ½! μ΄λΌκ³ μΈμΉλ©΄μ, μμλ£λ§ λΌμ΄κ°λ€.
λκ·λΆλμ°μ μΉ΄νλ‘κ·Έμ μ ν μννΈμ λ©΄μ μ΄ μ£Όμ΄μ‘μ λ, μμ μ μλ ν¬κΈ°μ μννΈμ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μννΈμ λ©΄μ μ μ Nμ΄ μ£Όμ΄μ§λ€. λ€μ μ€λΆν° Nκ° μ€μ μΉ΄νλ‘κ·Έμ μ νμλ μμλλ‘ λ©΄μ μ΄ μ£Όμ΄μ§λ€. Nμ 100,000μ΄νμ΄κ³ λ©΄μ μ 231-1μ΄νμΈ μμ μ μμ΄λ€.
μΆλ ₯
첫째 μ€μ μμ μ μλ μννΈ λ©΄μ μ μλ₯Ό μΆλ ₯νλ€.
νμ΄
2xy + x + y = S λΌ νμλ, (2x+1)(2y+1) = 2S+1λ‘ λνλΌ μ μλ€. x, yμ λ²μκ° μμ μ μμ΄λ―λ‘ 2S+1μ 무쑰건 ν©μ±μμ΄λ€. κ·Έλ¬λ―λ‘ μ λ ₯λ°μ Sμ λν΄μ 2S+1μ΄ μμμΈ κ²½μ°, μ λ΅ μΉ΄μ΄νΈλ₯Ό νλ μ¬λ €μ£Όλ©΄ λλ€.
#include <iostream>
using namespace std;
#define ll unsigned long long
ll N, ans;
int a_param[5] = {2, 3, 5, 7, 11};
ll power(ll x, ll y, ll mod) {
ll result = 1;
x %= mod;
while(y) {
if(y%2) result = (result*x)%mod;
y/=2;
x = (x*x)%mod;
}
return result;
}
bool miller(ll n, ll a) {
if(a%n == 0) return false;
ll k = n-1;
while(1) {
ll temp = power(a, k, n);
if(temp == n-1) return true;
if(k%2) return (temp == 1 || temp == -1);
k /= 2;
}
}
int isPrime(ll n) {
if(n == 2 || n == 3) return true;
if(n%2 == 0 || n == 1) return false;
for(int i=0; i<5; i++) {
ll a = a_param[i];
if(a == n) return true;
if(!miller(n, a)) return false;
}
return true;
}
int main() {
cin>>N;
while(N--) {
ll S; cin>>S;
if(isPrime(2*S+1)) ans += 1;
}
cout<<ans;
}