我的问题减少到找到两个给定数字之间的素数.我可以有一个大的范围1 to (1000)!,因此我需要一些数学优化.
显然,筛分方法在这种情况下会太慢.是否有任何可以应用的数学优化 - 例如,占用这个大空间的较小子集并推断其余数字.
PS:看起来我可能已经走到了死胡同 - 但我正在寻找的是一些可能有助于解决这个问题的优化.而且,我只是在寻找单线程方法.
编辑:我一直在思考的一种方法,可以解决许多大质数相关的问题 - 是有人维护全局素数表并使其可用于查找.PrimeGrid项目的人们可以为此做出有益的贡献.
我有一个键盘.
在第15行内的for函数
for(i=2; i<=90; i+=2){
int j=0+i;
printf("%i\n",i);
power=pow(inp,j);
factor=factorial(i);
if(i%4==0)fAns += power/factor;
else fAns -= power/factor;
}
Run Code Online (Sandbox Code Playgroud)
power=pow(inp,j);我添加的行j而不是使用,i因为它给了我同样的错误.undefined reference to 'pow'.
如果我j用2 替换,那么它工作正常,但当我使用j=i它不会工作.递增此行是否有问题?
我希望这个增加,而不是给我一个错误.
有类似Java的东西equals()吗?要比较对象是否是同一类型?
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof ViewMode)) {
return false;
}
ViewMode dm = (ViewMode) obj;
return dm.width == w
&& dm.h == h
&& dm.b == b
&& dm.f == f;
}
public int hashCode() {
return w ^ h ^ f ^ b ;
}
Run Code Online (Sandbox Code Playgroud) 我总是在读取指针算法的定义,只要你不离开数组的边界即可.我不确定我完全理解这意味着什么,我有点担心.因此这个问题.
假设我从一个指向数组开头的指针开始:
int *p = (int*) malloc(4 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)
现在我创建了两个位于数组边界之外的新指针:
int *q = p + 10;
int *r = p - 2;
Run Code Online (Sandbox Code Playgroud)
现在指针q-10,q-9..., ,r+2,r+3等所有的谎言数组的边界内.它们有效吗?例如,r[3] 保证给出相同的结果p[1]?
我做了一些测试,它的工作原理.但我想知道这是否适用于通常的C规范.具体来说,我使用的是Visual Studio 2010,Windows,而且我使用的是原生C(非C++)编程.我被覆盖了吗?
我意识到差异可以忽略不计,但是在尝试将无符号长度归零时哪个更有效?
unsigned long x;
...
x=0;
--OR--
x^=x;
Run Code Online (Sandbox Code Playgroud)
泰勒
最近在学习c编程时我发现了一些我觉得有趣的东西.我曾经读过,类似的语句int i=0;是强制定义的唯一方法,而语句就像extern int i;强制声明一样.类似的陈述int i;将取决于上下文.但是当我将extern与初始化相结合时会发生什么extern int i=13;.编译器生成警告.但这条规则对此有何规定?
我的编译器(gcc)显示警告
#include<stdio.h>
struct s{
unsigned char *p;
};
int main() {
struct s a = {"??/??/????"}; //warning
printf("%s",a.p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
警告:初始化中的指针目标在签名方面有所不同
请帮我解释为什么会出现此警告.
我试图弄清楚汇编指令实际上做了什么
addsd -8(%rbp), %xmm0
Run Code Online (Sandbox Code Playgroud)
我知道它是带有SSE2的x86-64机器上的浮点运算.另外,我知道%xmm0是一个寄存器.但是,我不确定的是-8(%rbp)的含义.手册有点令人困惑.
基本上,问题是,-8(%rbp)意味着它从寄存器中获取一个值(可能是rbp的最后8个字节),还是从内存中获取一个值(偏移量为-8的浮点值) rbp中包含的地址.
我正在为双Cortex-A9处理器优化两个单维阵列的元素乘法.Linux正在运行,我正在使用GCC 4.5.2编译器.
所以以下是我的C++内联汇编程序函数.src1,src2和dst是16字节对齐的.
更新:可测试代码:
void Multiply(
const float* __restrict__ src1,
const float* __restrict__ src2,
float* __restrict__ dst,
const unsigned int width,
const unsigned int height)
{
int loopBound = (width * height) / 4;
asm volatile(
".loop: \n\t"
"vld1.32 {q1}, [%[src1]:128]! \n\t"
"vld1.32 {q2}, [%[src2]:128]! \n\t"
"vmul.f32 q0, q1, q2 \n\t"
"vst1.32 {q0}, [%[dst]:128]! \n\t"
"subs %[lBound], %[lBound], $1 \n\t"
"bge .loop \n\t"
:
:[dst] "r" (dst), [src1] "r" (src1), [src2] "r" (src2),
[lBound] "r" (loopBound)
:"memory", "d0", "d1", "d2", …Run Code Online (Sandbox Code Playgroud) 的_mm_shuffle_ps()固有允许一个交织浮子投入低2个浮纱和高2个漂浮的输出.
例如:
R = _mm_shuffle_ps(L1, H1, _MM_SHUFFLE(3,2,3,2))
Run Code Online (Sandbox Code Playgroud)
将导致:
R[0] = L1[2];
R[1] = L1[3];
R[2] = H1[2];
R[3] = H1[3]
Run Code Online (Sandbox Code Playgroud)
我想知道整数数据类型是否有类似的内在可用?有两个__m128i变量和掩码进行交错的东西?
的_mm_shuffle_epi32()内在的,只需一个128位向量,而不是两个.