2020 CCPC Wannafly Winter Camp Day1 H
程序员文章站
2022-07-12 15:07:00
...
题目好像不能公开,所以我只写个题解…
开场签到题丢给队友,转而开了H题。
H的思路是选定一个数y通过gcd(y,k)来 在1到n 内唯一地确定k的值。
不难发现,通过gcd来唯一确定k
所以:
1.y必须是k的倍数,否则无法区分gcd(y,k)与k。
2.对于1~(n/kk)内的每一个素数p,y/k必须是p的倍数,否则无法区分k与pk。
最终答案等于k(1~n/k*k内所有的质数)
质数累乘会超出longlong需要使用大数(double浮点数的精度不足)
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
const int maxn = 505;
int su[maxn] = {0};
struct BigInt//大数板子
{
const static int mod = 10000;
const static int DLEN = 4;
int a[600], len;
BigInt()
{
memset(a, 0, sizeof(a));
len = 1;
}
BigInt(int v)
{
memset(a, 0, sizeof(a));
len = 0;
do
{
a[len++] = v % mod;
v/=mod;
}while(v);
}
BigInt operator *(const BigInt &b)const
{
BigInt res;
for(int i = 0; i < len; i++)
{
int up = 0;
for(int j = 0; j < b.len; j++)
{
int temp = a[i]*b.a[j] + res.a[i+j] + up;
res.a[i+j] = temp % mod;
up = temp / mod;
}
if(up != 0)
{
res.a[i+b.len] = up;
}
}
res.len = len + b.len;
while(res.a[res.len-1] == 0 && res.len > 1) res.len--;
return res;
}
void output()
{
printf("%d", a[len-1]);
for(int i = len-2; i >= 0; i--)
{
printf("%04d", a[i]);
}
printf("\n");
}
};
void aishai()//埃筛用来筛素数
{
su[1] = 1;
for(int i = 2; i <= 250; i++)
{
if(su[i] == 0)
{
for(int j = 2; i * j <= 500; j++)
{
su[i*j] = 1;
}
}
}
return ;
}
int main()
{
aishai();
int t;
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);//关掉同步流,加快输入
cin >> t;
while(t--)
{
BigInt ans(1);
int n, k;
cin >> n >> k;
BigInt kda(k);
ans = ans * kda;
for(int i = 2; i <= n / k; i++)
{
if(su[i] == 0)
{
BigInt t(i);
ans = ans * t;
}
}
ans.output();
}
return 0;
}
推荐阅读
-
2020 CCPC Wannafly Winter Camp Day1 A,B,E~I题解
-
2020 CCPC Wannafly Winter Camp Day1 F 乘法 (二分)
-
2020 CCPC Wannafly Winter Camp Day2 Div.1&2(A 托米的字符串)
-
2020 CCPC Wannafly Winter Camp Day1H
-
2020 CCPC Wannafly Winter Camp Day1 H 最大公约数(唯一分解定理)
-
2020 CCPC Wannafly Winter Camp Day1 F 乘法(二分)
-
CCPC-Wannafly Winter Camp Day2 H
-
2020 CCPC Wannafly Winter Camp Day1 B 密码学( 模拟)
-
2020 CCPC Wannafly Winter Camp Day1 Div.1&2(A题 期望逆序对)(找规律)
-
2020 CCPC-Wannafly Winter Camp