遍历打表,这题真诡异,我一直WA,把两个100改成101就AC了,还是不清楚有什么区别,谁能帮帮我啊
代码如下:
#include <bits/stdc++.h> using namespace std; int y[105]; void A(int x[])//遍历打表所有100以内质数 { int i,j,k; for(i=2,j=0; i<=101; ++i) if(!y[i]) { x[j++]=i; for(k=i*2; k<=101; k+=i) y[k]=1; } } int main() { int i,j,k,n,x[55],z[55]; A(x); while(cin>>n&&n) { cout<<setw(3)<<n<<"! ="; memset(z,0,sizeof(z)); for(i=2; i<=n; ++i) for(j=0,k=i; k>1; ++j) while(!(k%x[j])) { k/=x[j]; z[j]++; } for(i=0; x[i]<=n; ++i); if(i<=15) for(j=0; j<i; ++j) cout<<setw(3)<<z[j]; else for(j=0; j<i; ++j) { cout<<setw(3)<<z[j]; if(!((j+1)%15)) cout<<endl<<" "; } cout<<endl; } return 0; }