http://zh.wikipedia.org/zh-tw/%E5%8B%BE%E8%82%A1%E6%95%B8
#include <stdio.h>
#include <stdbool.h>
int gcd(int m, int n)
{
if (n == 0)
return m;
return gcd(n, m%n);
}
int main(void)
{
int b, c, m, n, N, triple;
bool flag[1000001];
while (scanf("%d", &N) == 1)
{
for (c = 1; c <= N; c++)
flag[c] = false;
triple = 0;
for (n = 1; n < 1000; n++)
for (m = n+1; (c=m*m+n*n) <= N; m+=2)
{
if (gcd(m, n) != 1)
continue;
triple++;
for (b = 1; b*c <= N; b++)
flag[b*(m*m-n*n)] = flag[b*(2*m*n)] = flag[b*c] = true;
}
for (c = 0, b = 1; b <= N; b++)
if (!flag[b])
c++;
printf("%d %d\n", triple, c);
}
return 0;
}
沒有留言:
張貼留言