2020 CCPC Wannafly Winter Camp Day1 H

题目好像不能公开,所以我只写个题解…
开场签到题丢给队友,转而开了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;
}
发布了11 篇原创文章 · 获赞 0 · 访问量 630

猜你喜欢

转载自blog.csdn.net/weixin_43934344/article/details/104014519