所以,我做了这个小程序。它给出了所有正确的输出,但当它上传到网上法官扔我一个时间限制超过。有什么办法让它更有效率吗?
这是我的代码。
int const MAX = 1000001;
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
int count = 0, array[MAX], a, b, pi = 0;
bool end = false;
for(int i = 1; i <= MAX; i++)
{
count = 0;
for(int j = 2; j <= sqrt(i); j++)
{
if(i % j == 0)
{
array[i]=0;
count++;
break;
}
}
if(count == 0 && i != 1){
array[i]=1;
}
}
do {
cin >> a >> b;
pi = 0;
if ((a == 0) && (b == 0)) {
end = true;
break;
}
else {
for (int i = a; i <= b; i++) {
if (array[i] == 1) {
pi ++;
}
}
cout << pi << endl;
}
} while (end == false);
cout << endl;
return 0;
}
您可以考虑使用埃拉托斯特尼的筛子
。它是一种高效的素数生成算法。
我有三个变量Min=0.29、Max=6.52和center=2.10。我希望创建一个表,以以下方式将这些数据以表格式分配为100个值: 这里,这个图像可以分成0到50和50到100两部分。 在第一部分中,后续值的x与y的增加在1-10与10-20之间较高,在10-20与20-30之间较高,以此类推。 在第二部分中,随后值的x与y的增加在50-60比60-70之间较低,在60-70比70-80之间
本文向大家介绍计算C ++中给定范围内的最小元素数,包括了计算C ++中给定范围内的最小元素数的使用技巧和注意事项,需要的朋友参考一下 我们得到了一个大小为N的整数数组。变量L和R定义了一个介于1和N之间的范围。目标是找到位于范围L和R中的最小元素数,使得L> = 1且R <= N. 我们将遍历位于范围L和R中的元素并找到最小的元素,以实现此目的。 同样,遍历范围L和R的元素,如果任何元素等于在步
所以我必须写一个程序,找到给定范围之间的所有回文数。程序必须使用numDigits()方法,该方法接受int数并返回该int的位数。 一个isPalindrome()方法,它将接受一个int数字,并返回一个布尔值true或false,无论该数字是否回文 我在这里编码了一个numDigit()方法: 我知道如何用另一种方法找到回文,但作业是专门针对这种技术的。我如何实现这个numDigit()方法来
问题内容: 我的数据库中有以下一组匹配日期的日期(dd / MM / yyyy): 事件具有开始和结束日期(时间无关紧要),并且endDate为NULL表示事件仍在进行中。 我想确定的是两个任意日期之间的日期范围,其中a)没有事件,b)事件重叠。 因此,对于输入日期范围01/04/2009-30/06/2009,我希望得到以下结果: 注意,作为结果,两个相邻的重叠范围是可以接受的。 谁能用SQL算
我有一个数字列表,现在我想从列表中取一个数字,并检查有多少个元素可以将这个数字与余数除以0。 这是我的代码: 对于示例输入: 输出是: 但是此代码以 的时间复杂度运行。但是我的输入列表大小范围最大为 10 5,每个元素也在 1 到 105 之间。那么如何提高这个程序的时间复杂度呢?
本文向大家介绍c语言求出给定范围内的所有质数,包括了c语言求出给定范围内的所有质数的使用技巧和注意事项,需要的朋友参考一下 程序功能: 输入一个整数,要求打印出这个整数以内的所有质数。 程序示例: 程序解析: 1,IsPrime()函数用来判断一个整数是不是质数,如果是返回true,否则返回false。在这个函数中因为调用了C语言库函数sqrt(),所以要在头文件中包含#include 。 2,s