数值N的范围为1<=N<=10^50
。函数f(x)
定义为一个数x的所有数字之和。我们必须求特殊对(x,y)的个数的计数,使得:
1。0<=x,y<=n
2。F(x)+F(y)
本质上是素数
我们只能对(x,y)
和(y,x)
计数一次。打印输出的模1000000000+7
我的方法:
因为给定范围内的数字和的最大值可以是450(如果长度为50的数字中所有字符都是9,则9*50=450
)。因此,我们可以创建一个大小为451*451的二维数组,并且对于所有的对,我们可以存储它是否为素数。
现在,我面临的问题是在线性时间内找到给定数N的所有对(x,y)(显然,我们不能通过10^50循环找到所有的对)。是否有人建议任何方法,或任何公式(如果存在的话),以得到所有的对在线性时间。
您可以创建一个大小为451*451的二维数组,对于所有的对,我们可以存储它是否为素数。同时,如果你知道有多少个小于n的数是F(x)=i,有多少个是F(x)=j,那么在检查(i+j)是否为素数后,你就可以很容易地找到一个状态为(i,j)的二维数组大小为451*451的结果。
所以你需要找到F(x)=i的总数。
您可以很容易地使用数字DP:
string given=convertIntToString(given string);
int DP[51][2][452]= {-1};
Initially all index hpolds -1;
int digitDp(int pos,int small,int sum)
{
if(pos==given.size())
{
if(sum==i) return 1;
else return 0;
}
if(DP[pos][small][sum]!=-1)return DP[pos][small][sum];
int res=0;
if(small)
{
for(int j=0; j<=9; j++)res=(res+digitDp(pos+1,small,sum+j))%1000000007;
}
else
{
int hi=given[pos]-'0';
for(int j=0; j<=hi; j++)
{
if(j==hi)res=(res+digitDp(pos+1,small,sum+j))%1000000007;
else res=(res+digitDp(pos+1,1,sum+j))%1000000007;
}
}
return DP[pos][small][sum]=res;
}
int res[452];
for(i=0;i<=451;i++){
memset(DP,-1,sizeof DP);
res[i]=digitDp(0,0,0);
}
现在测试每一对(i,j):
int answer=0;
for(k=0;k<=451;k++){
for(int j=0;j<=451;j++){
if(isprime(k+j)){
answer=((log long)answer+(long long)res[k]*(long long)res[j])%1000000007;
}
}
}
最后的结果将回答/2,因为(i,j)和(j,i)将被计算一次。
Although there is a case for i=1 and j=1 , Hope you will be able to handle it.
我如何用java8流式API表达这一点? 我想对流中的每个项执行itemcumer。如果没有要执行的项目,则清空操作。 我当然可以写这样的东西: 但我更愿意避免任何s。 我还考虑过在peek方法中设置一个标志,但该标志是非最终的,因此是不允许的。使用布尔容器似乎也是一种太多的变通方法。
我需要一个正则表达式来验证, 长度应该是18 前5个字符应该是(xyz34|xyz12) 其余13个字符只能是字母和数字,不允许有空格或特殊字符。 我有一个这样的模式, 但这允许空格和特殊字符,如($、%等),这违反了规则#3。 有没有建议排除这个空格和特殊字符,并严格检查它必须是字母和数字?
本文向大家介绍C ++中具有3个数组元素的特殊三元组的总和,包括了C ++中具有3个数组元素的特殊三元组的总和的使用技巧和注意事项,需要的朋友参考一下 在此问题中,给定3个数组X,Y,Z。我们的任务是创建一个程序,以查找包含3个数组中的元素的特殊三元组的和。 特殊三元组是具有以下属性的特殊三元组类型- 对于(a,b,c):a≤b且b≥c ,即三元组的中间元素应比其他两个元素要好。 并且,三元组的值
我正在尝试在php中创建以下元素,以创建我们的一个客户所需的xml。 每件事都很好,但我不知道如何创建以下元素 我已经尝试了几种方法,但仍然无法正确生成上述示例 有人能送我上路吗? 这是我的代码
4.6. and 和 or 的特殊性质 4.6.1. 使用 and-or 技巧 在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值;而是,返回它们实际进行比较的值之一。 例 4.15. and 介绍 >>> 'a' and 'b' 'b' >>> '' and 'b' '' >>> 'a' and 'b' and
当我阅读Eclipse的源代码时,我发现了一个名为“$classname$.java”的文件。其部分内容如下: 我试图提取if的AST,然后我出现了一个错误。“%if”和“%endif”在Java中是什么意思?我怎么才能得到它的AST呢?