第三题
求解最大素因子:在网上学到一种新方法:(筛法)
1,开辟一个数组空间,初始化为0;0和1的素因子默认0,故 i 从2开始循环;
2,j 的初值是 i ,每次循环又加上 i ,即 j 每次都存的是 i 的倍数。通过a[ j ]将 j 位置上的数赋值为 i ,也就是 j 可能的最大素因子是 i 。
3,最外层for循环,当判断a[ i ]不是0时,说明此处坐标位置 i 是合数,就不执行内层for循环了,然后 i ++。所以 I 每次记录的都是素数。
#include<iostream> #define max 10010 using namespace std; int a[max]={0}; void num_prime() { int i,j; for(i=2;i<100;i++) { // a[max]初始化全为0,都能通过这个条件 if(!a[i]) { for(j=i;j<100;j=j+i){ // 倍数 a[j]=i; //更新最大素数 cout<<"I:"<<i<<" J:"<<j<<endl; } } } }