196.
質數距離
題目描述:
給定兩個整數l和u,你需要在閉區間[l,u]內找到距離最接近的兩個相鄰質數c1和c2(即c2-c1是最小的),如果存在相同距離的其他相鄰質數對,則輸出第一對。
同時,你還需要找到距離最遠的兩個相鄰質數d1和d2(即d1-d2是最大的),如果存在相同距離的其他相鄰質數對,則輸出第一對。
輸入格式
每行輸入兩個整數l和u,其中l和u的差值不會超過1000000。
輸出格式
對於每個l和u ,輸出乙個結果,結果佔一行。
結果包括距離最近的相鄰質數對和距離最遠的相鄰質數對。(具體格式參照樣例)
如果l和u之間不存在質數對,則輸出「there are no adjacent primes.」。
資料範圍
1≤l輸入樣例:
2 17
14 17
輸出樣例:
2,3 are closest, 7,11 are most distant.
there are no adjacent primes.
思路:
首先我們發現:r−l 的範圍很小,我們應該要能夠快速求出 l∼sqrt(r)之間的質數。
顯然有推論:任意乙個合數 x 必定包含乙個不超過 sqrt( x)的質因子。
所以我們可以篩出 [1, sqrt(r) ] 之間的所有質數,對於每個質數 p,把 [l,r] 中能被 p 整除的數標記為合數。最終沒有被標記的數就是質數,對相鄰的質數兩兩比較,找出差值最小和最大的即可。
**:
#includeusing namespace std;
#define ll long long
#define mod 100003
#define maxn 1000005
#define inf 0x3f3f3f3f
int v[maxn], prime[maxn];
int shu[maxn];
int result[maxn];
int m = 0;
void xianxing(int n)//線性篩法
for (int j = 1; j <= m; j++)
v[i*prime[j]] = prime[j];}}
/*for (int i = 1; i <= m; i++)
*/}int main()
}//cout << "aaaaa" << endl;
if (l == 1)shu[0] = 1;
int num = 0;
for (int i = 0; i <= r - l; i++)
}int maxx = 0;
int minn = inf;
int a1, a2, b1, b2;
for (int i = 1; i < num; i++)//乙個個相鄰的質數去比較,算出他的最大值和最小值
if (minn > result[i + 1] - result[i])
}//cout << maxx <<" "
else
//cout << a1 << " " << a2 << " " << b1 << " " << b2 << endl;
}}
ACWING196 質數距離
給定兩個整數l和u,你需要在閉區間 l,u 內找到距離最接近的兩個相鄰質數c1和c2 即c2 c1是最小的 如果存在相同距離的其他相鄰質數對,則輸出第一對。同時,你還需要找到距離最遠的兩個相鄰質數d1和d2 即d1 d2是最大的 如果存在相同距離的其他相鄰質數對,則輸出第一對。輸入格式 每行輸入兩個...
Acwing196 質數距離
給定兩個整數l和u,你需要在閉區間 l,u 內找到距離最接近的兩個相鄰質數c1和c2 即c2 c1是最小的 如果存在相同距離的其他相鄰質數對,則輸出第一對。同時,你還需要找到距離最遠的兩個相鄰質數d1和d2 即d1 d2是最大的 如果存在相同距離的其他相鄰質數對,則輸出第一對。輸入格式 每行輸入兩個...
數論 質數距離
給定兩個整數l和u,你需要在閉區間 l,u 內找到距離最接近的兩個相鄰質數c1和c2 即c2 c1是最小的 如果存在相同距離的其他相鄰質數對,則輸出第一對。同時,你還需要找到距離最遠的兩個相鄰質數d1和d2 即d1 d2是最大的 如果存在相同距離的其他相鄰質數對,則輸出第一對。輸入格式 每行輸入兩個...