UVA 160 - Factors and Factorials

遍历打表,这题真诡异,我一直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;
}

猜你喜欢

转载自blog.csdn.net/liuxinyu666/article/details/80006966
今日推荐