UVA 294(p344)----Divisors

来源:互联网 发布:企业管理优化建议 编辑:程序博客网 时间:2024/05/18 20:32
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=100007;int u[maxn],prime[maxn];int ans,num,n,l,r,p;void get(){    num=1;    memset(u,true,sizeof(u));    for(int i=2; i<=maxn; i++)    {        if(u[i]) prime[num++]=i;        for(int j=1; j<num; j++)        {            if(i*prime[j]>maxn) break;            u[i*prime[j]]=false;            if(i%prime[j]==0) break;        }    }}int solve(int x){    int sum=1;    for(int i=1; x>1&&i<num; i++)    {        if(x%prime[i]==0)        {            int cnt=1;            while(x%prime[i]==0)            {                cnt+=1;                x/=prime[i];            }            sum*=cnt;        }    }    return sum;}int main(){    //freopen("in.in","r",stdin);    get();    scanf("%d",&n);    for(int i=0; i<n; i++)    {        ans=0;        scanf("%d%d",&l,&r);        for(int i=l; i<=r; i++)        {            // cout<<i<<endl;            int temp=solve(i);            if(temp>ans)            {                ans=temp;                p=i;            }        }        printf("Between %d and %d, %d has a maximum of %d divisors.\n",l,r,p,ans);    }    return 0;}
题目地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=4&page=show_problem&problem=230
0 0
原创粉丝点击