大一萌新求助 肝作业T﹏T

海上空浮 2018-10-19 02:17:42
跪求哪位大哥大姐能帮忙看一眼,熬夜肝作业不容易 为什么我的代码输入2000000会算不出来?查了一下,int的值没有超啊 埃拉托色尼筛法求素数 问题描述 在公元前3世纪,古希腊天文学家埃拉托色尼发现了一种找出不大于n的所有自然数中的素数的算法,即埃拉托色尼筛选法。这种算法能比比朴素的遍历法更快地找出素数,它首先需要按顺序写出2到n中所有的数。以n=20为例: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 然后把第一个元素画圈,表示它是素数,然后依次对后续元素进行如下操作:如果后面的元素是画圈元素的倍数,就画X,表示该数不是素数。在执行完第一步后,会得到素数2,而所有是2的倍数的数将全被画掉,因为他们肯定不是素数。接下来,只需要重复上述操作,把第一个既没有被圈又没有画X的元素圈起来,然后把后续的是它的倍数的数全部画X。本例中这次操作将得到素数3,而所有是3的倍数的数都被去掉。以此类推,最后数组中所有的元素不是画圈就是画X。所有被圈起来的元素均是素数,而所有画X的元素均是合数。给定一个数字,编写一个程序实现埃拉托色尼筛选法找出小于或等于该数字的的所有素数。 输入输出描述 输入 输入为一个正整数n, 2≤n≤2000000 输出 输出为一行,输出所有小于或等于输入的素数 数据之间用空格分隔 最后的一行输出后面无空格 #include <iostream> using namespace std; int main() { int n, k = 2; cin >> n; int e[ n ]; cout << "2"; int prime = 2; for ( int i = 2; i <= n; ++i) //给数组赋值 { e[ i - 1 ] = i; } while ( prime == k ) { for ( int j = 1; j <= n / prime; ++j) //除去素数的倍数 { e[ j * prime - 1 ] = 0; } for ( k = prime + 1; k < n ; ++k) //找到下一个素数 { if ( e[k-1] ) { prime = k; cout << " " << prime; break; } } } return 0; }
...全文
117 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
甜甜甜.... 2018-10-29
  • 打赏
  • 举报
回复
数组不是从0开始吗,e数组赋值的时候出错了吧
  • 打赏
  • 举报
回复
没有分数帖子是怎么发出来的啊 求教
海上空浮 2018-10-19
  • 打赏
  • 举报
回复
新人只有20分给不了

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧