我试图找到从1到100的素数。我遇到的问题是当程序将值2赋给整数类型的变量j时。变量j的值不会改变。有谁知道为什么会这样?
创建一个程序来查找1到100之间的所有素数。
执行此操作的一种方法是编写一个函数来检查数字是否为 素数(即,查看数字是否可以除以素数 小于它自己)按顺序使用素数向量(这样如果 vector被称为primes,primes [0] == 2,primes [1] == 3,primes [2] == 5, 等等。)。然后写一个从1到100的循环,检查每个数字 查看它是否是素数,并存储在向量中找到的每个素数。 写另一个循环,列出你找到的素数。你可能会检查 通过将素数向量与素数进行比较得出结果。 考虑2第一个素数。
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<int> primes = { 2 };
for (int i = 2; i <= 100; ++i)
for (int j = 2; j < i; ++j)
if (i % j == 0)
break;
else
primes.push_back(j);
for (int i = 0; i < primes.size(); ++i)
std::cout << primes[i] << ' ';
}
答案 0 :(得分:4)
您的初始实施中存在一些错误:
for /r %i in (*) do bcp <tablename> in %i -t "^" -r "\n" -c -C 28591 -S <databaseinstance> -U <username> -P <password>
向量一些清理过的代码看起来有点类似:
primes
然而,由于这个问题看起来像是家庭作业,所以不要盲目复制这个问题,并尝试先了解这里使用的所有概念。
答案 1 :(得分:1)
#include <vector>
#include <iostream>
#include <string>
int main()
{
std::vector<int> primes;
primes.push_back(2);
for(int i=3; i < 100; i++)
{
bool prime=true;
for(int j=0;j<primes.size() && primes[j]*primes[j] <= i;j++)
{
if(i % primes[j] == 0)
{
prime=false;
break;
}
}
if(prime)
{
primes.push_back(i);
std::cout << i << " ";
}
}
return 0;
}
这将打印出以下内容:
3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
我们跟踪所有先前计算的素数。如果一个数字可以被非素数除尽,那么还有一些素数&lt; =该除数,它也可以被除数。这会使计算减少一个primes_in_range / total_range。
答案 2 :(得分:0)
对于初学者而言,作业中写有编写函数,使用素数向量检查数字是否为素数。
此循环
for (int j = 2; j < i; ++j)
if (i % j == 0)
break;
else
primes.push_back(j);
没有意义,因为它不使用向量来检查i
是否可以被向量的元素整除。如果我不能被向量的任何元素整除,那么在循环之后还应该向向量添加一个新的素数。
还要考虑到作业中写有
然后写一个从1到100 的循环,检查每个数字 看看它是否是一个主要的
因此,只有下面显示的代码才能满足作业。:)
该程序可以通过以下方式查看。我没有使用int
类型,而是使用了unsigned int
类型,因为您只检查非负值。
#include <iostream>
#include <vector>
bool is_prime( const std::vector<unsigned int> &primes, unsigned int x )
{
std::vector<unsigned int>::size_type i = 0;
while ( i < primes.size() && x % primes[i] != 0 ) ++i;
return x != 1 && i == primes.size();
}
int main()
{
const unsigned int N = 100;
std::vector<unsigned int> primes;
for ( unsigned int i = 1; i <= N; ++i )
{
if ( is_prime( primes, i ) ) primes.push_back( i );
}
for ( unsigned int x : primes ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
程序输出
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
答案 3 :(得分:0)
//Thank you for all your answers, but I just figured out why. The codes are following:
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<int> primes = { 2 };
for (int i = 2; i <= 100; ++i)
for (int j = 2; j < i; ++j) {
if (i % j == 0)
break;
if (j == i - 1)
primes.push_back(i);
}
for (int x: primes)
std::cout << x << ' ';
return 0;
}