1/2 Section 3
parent
23652daf61
commit
d860218816
@ -0,0 +1,6 @@
|
||||
fill(isprime, true);
|
||||
for (int i = 2; i < n; i++)
|
||||
if (isprime[i])
|
||||
for (int j = i * i; j < n; j += i)
|
||||
isprime[i] = false;
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
void exgcd(int64 a, int64 b, int64 &x, int64 &y)
|
||||
{ b == 0 ? (x = 1, y = 0) : (exgcd(b, a % b, y, x), y -= x * (a / b)); }
|
||||
@ -0,0 +1,49 @@
|
||||
#include <cmath>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
int prime_count;
|
||||
int prime[5140];
|
||||
bool f[1000010];
|
||||
bool notprime[50010];
|
||||
int main()
|
||||
{
|
||||
for (int i = 2; i < 50010; i++)
|
||||
if (!notprime[i])
|
||||
for (long long j = 1ll * i * i; j < 50010; j += i)
|
||||
notprime[j] = true;
|
||||
for (int i = 2; i < 50010; i++)
|
||||
if (!notprime[i])
|
||||
prime[prime_count++] = i;
|
||||
int l, r;
|
||||
while (~scanf("%d%d", &l, &r))
|
||||
{
|
||||
l = l == 1 ? 2 : l;
|
||||
memset(f, 0, sizeof(f));
|
||||
for (int i = 0, a, b; i < prime_count; i++)
|
||||
{
|
||||
a = (l - 1) / prime[i] + 1;
|
||||
b = r / prime[i];
|
||||
for (int j = a; j <= b; j++)
|
||||
if (j > 1)
|
||||
f[j * prime[i] - l] = true;
|
||||
}
|
||||
int mx = -1, mn = 0x3f3f3f3f, x1 = 0, x2 = 0, y1 = 0, y2 = 0;
|
||||
for (int i = 0, p = -1; i <= r - l; i++)
|
||||
if (!f[i])
|
||||
{
|
||||
if (~p)
|
||||
{
|
||||
if (mx < i - p)
|
||||
mx = i - p, x1 = p + l, y1 = i + l;
|
||||
if (mn > i - p)
|
||||
mn = i - p, x2 = p + l, y2 = i + l;
|
||||
}
|
||||
p = i;
|
||||
}
|
||||
if (mx == -1)
|
||||
puts("There are no adjacent primes.");
|
||||
else
|
||||
printf("%d,%d are closest, %d,%d are most distant.\n", x2, y2, x1, y1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
#include <cstdio>
|
||||
const int maxn = 1010;
|
||||
int phi[maxn], sum[maxn];
|
||||
int main()
|
||||
{
|
||||
phi[1] = 1;
|
||||
for (int i = 2; i <= 1005; i++) if (!phi[i])
|
||||
for (int j = i; j <= 1005; j += i)
|
||||
{
|
||||
if (!phi[j]) phi[j] = j;
|
||||
phi[j] = phi[j] / i * (i - 1);
|
||||
}
|
||||
for (int i = 1; i <= 1005; i++) sum[i] = sum[i - 1] + phi[i];
|
||||
int T, x;
|
||||
scanf("%d", &T);
|
||||
for (int i = 1; i <= T; i++)
|
||||
{
|
||||
scanf("%d", &x);
|
||||
printf("%d %d %d\n", i, x, sum[x] << 1 | 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
#include <cstdio>
|
||||
int f[1 << 12 | 1];
|
||||
long long _f(int x)
|
||||
{
|
||||
long long ans = 1;
|
||||
for (int i = x; i; i--) ans *= i;
|
||||
return ans;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
int x;
|
||||
while (~scanf("%d", &x))
|
||||
{
|
||||
int _x = x, t = 0;
|
||||
for (int i = 2; i * i <= _x; i++)
|
||||
{
|
||||
f[t] = 0;
|
||||
while (_x % i == 0)
|
||||
_x /= i, f[t]++;
|
||||
t++;
|
||||
}
|
||||
if (_x != 1) f[t++] = 1;
|
||||
int sum = 0;
|
||||
for (int i = 0; i < t; i++) sum += f[i];
|
||||
long long fac = _f(sum);
|
||||
for (int i = 0; i < t; i++) fac /= _f(f[i]);
|
||||
printf("%d %lld\n", sum, fac);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
Loading…
Reference in new issue