把2010写成k个不相等的质数平方和,求k的最大值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把2010写成k个不相等的质数平方和,求k的最大值相关的知识,希望对你有一定的参考价值。

2,3,5,7,11,13,17,23,29,31,37,41,43
2,3,5,7,11,13,17,23,29这9个最小质数的平方和为2036,已超出2010
所以最多8个,但其中就不能带2,否则和为奇数。而8个最小的奇质数的和也超过2010.
因此最多7个,此时需带2,另6个的和就为2006.由于除3外,其余质数都是6K+/-1的形式的,其平方也为6K+1.而2006为6K+2,因此需含有3.剩下5个的和为1997.
经尝试得7,11,13,17,37
所以最大的K为7,这7个质数为2,3,7,11,13,17,37.
参考技术A 先写出有可能出现的数,为4,9,25,49,121,169,289,361,529,841,961,1369,1681,1849.
不管怎么写,出现的数字最多也就这么多了。
假设最大的数为529,则前面的数全加起来也不够2010.
假设为841,则529必选,余下和为640,似乎不行。
若为961,有961+529+361+121+4+9+25=2010,此时k=7,已经不小了。
若最大的数为1849,1681,1369,如果想超过7,则其余数至少要大于前7个数的和,但是前7个数已经超过660了,因此不可能。

所以k=7

UVA 1575 Factors

https://vjudge.net/problem/UVA-1575

 

题意:

令f(k)=n 表示 有n种方式,可以把正整数k表示成几个数的乘积的形式。

例 10=2*5=5*2,所以f(10)=2

给出n,求最小的k

 

搜索

从最小的质数开始枚举选几个

假设前i-1个种质数用了k个,有sum种方案,第i种质数选a个,

那么前i种质数的方案就有sum*C[k+a][a]

可以理解原来有k个位置,又加了a个位置,有a个数可以放在任意位置

所以前i种的每一种方案都变成C[k+a][a]种

 

枚举每个质数选几个时,如果上一个质数选了k个,那么这一个质数最多选k个

假设这个质数选了k+1个,那么显然上一个质数选k+1个,这个选k个更优

 

注意整数类型上限

 

#include<cstdio>
#include<iostream>
using namespace std;
typedef unsigned long long LL;
int p[21]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};
LL ans,n;
LL C[70][70];
void solve(int num,int lim,LL tot,LL now,int last)
{
    if(now>ans) return;
    if(tot==n) { ans=now; return ; }
    if(tot>n || num>20) return;
    LL t=1;
    for(int i=1;i<=lim;i++)
    {
        t*=p[num];
        if(now>=ans/t) return;
        solve(num+1,i,tot*C[last+i][i],now*t,last+i);
    }
}
int main()
{
    C[0][0]=1;
    for(int i=1;i<70;i++)
    {
        C[i][0]=1;
        for(int j=1;j<=i;j++)
            C[i][j]=C[i-1][j-1]+C[i-1][j];
    }
        
    while(scanf("%lld",&n)!=EOF)
    {
        if(n==1)
        {
            printf("1 2\n");
            continue;
        }
        ans=(LL)1<<63;
        solve(1,63,1,1,0);
        printf("%lld %lld\n",n,ans);
    }
}

 

以上是关于把2010写成k个不相等的质数平方和,求k的最大值的主要内容,如果未能解决你的问题,请参考以下文章

[中山市选2011]完全平方数 ——莫比乌斯函数

hdu 6125 Free from square (状压DP+分组背包)

uva10780 质因子分解

HDU 6608

一个堆排序问题

[bzoj2440]完全平方数[中山市选2011][莫比乌斯函数][线性筛][二分答案]