Problem Link : https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1621
Solution Idea : http://pavelsimo.blogspot.com/2012/06/uva-10680-lcm.html
Solution :
#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool status[1000002];
vector<ll int>prime;
void sieve()
{
ll int n=1000000;
ll int sq=sqrt(n);
for(ll int i=4; i<=n; i=i+2) status[i]=true;
prime.push_back(2);
for(ll int i=3; i<=sq; i=i+2)
{
if(status[i]==false)
{
for(int j=i*i; j<=n; j=j+i) status[j]=true;
}
}
status[1]=1;
status[0]=1;
for(ll int i=3; i<=n; i=i+2)
{
if(status[i]==0) prime.push_back(i);
}
}
ll int fact[1000005];
int main()
{
ll int n,val,sq,q,rs,cnt,ans;
sieve();
while(scanf("%lld",&n) and n)
{
memset(fact,0,sizeof(fact));
fact[1]=1;
ans=1;
for(ll int j=0; j<prime.size() and prime[j]<=n; j++)
{
val=prime[j];
while(val<=n)
{
val=val*prime[j];
}
val=val/prime[j];
fact[prime[j]]=val;
}
ll int cc=fact[5];
cnt=0;
while(fact[5]>1)
{
fact[5]=fact[5]/5;
cnt++;
}
for(ll int k=cnt; k>0; k--)
{
fact[2]=fact[2]/2;
}
for(int i=1; i<=1000000; i++)
{
if(fact[i]!=0) ans=((ans%10)*(fact[i]%10))%10;
}
printf("%lld\n",ans);
}
}
Solution Idea : http://pavelsimo.blogspot.com/2012/06/uva-10680-lcm.html
Solution :
#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool status[1000002];
vector<ll int>prime;
void sieve()
{
ll int n=1000000;
ll int sq=sqrt(n);
for(ll int i=4; i<=n; i=i+2) status[i]=true;
prime.push_back(2);
for(ll int i=3; i<=sq; i=i+2)
{
if(status[i]==false)
{
for(int j=i*i; j<=n; j=j+i) status[j]=true;
}
}
status[1]=1;
status[0]=1;
for(ll int i=3; i<=n; i=i+2)
{
if(status[i]==0) prime.push_back(i);
}
}
ll int fact[1000005];
int main()
{
ll int n,val,sq,q,rs,cnt,ans;
sieve();
while(scanf("%lld",&n) and n)
{
memset(fact,0,sizeof(fact));
fact[1]=1;
ans=1;
for(ll int j=0; j<prime.size() and prime[j]<=n; j++)
{
val=prime[j];
while(val<=n)
{
val=val*prime[j];
}
val=val/prime[j];
fact[prime[j]]=val;
}
ll int cc=fact[5];
cnt=0;
while(fact[5]>1)
{
fact[5]=fact[5]/5;
cnt++;
}
for(ll int k=cnt; k>0; k--)
{
fact[2]=fact[2]/2;
}
for(int i=1; i<=1000000; i++)
{
if(fact[i]!=0) ans=((ans%10)*(fact[i]%10))%10;
}
printf("%lld\n",ans);
}
}
No comments:
Post a Comment