GOT IT ACCEPTED
Posted: Tue May 02, 2006 11:28 am
thanx a lot everybody ... especially mamun
finally i got it accepted.
finally i got it accepted.
Code: Select all
//relatives
#include <iostream>
#include<string>
#include<iomanip>
#include<cmath>
#include<vector>
using namespace std;
long long n,r;
long long phi;
int main()
{
long long i;
vector<long long> esp(1000001,1);
esp[0]=esp[1]=0;
for (i=2;i<1000001;i++){
if (esp[i]==1) for (int j=2*i;j<1000001;j+=i) esp[j]=0;
}
while(cin>>n, n) {
phi=n;
i=2; r=0;
long long a; a=n;
while(n>1 || i<(sqrt(a)+1)) {
if (n%i!=0) {i++; while(!esp[i] && i<100000) {i++;}}
else {n=n/i;
if(r!=i) {phi=phi/i; phi=phi*(i-1);}
r=i;}
}
if(n>1) {phi=phi/n; phi=phi*(n-1);}
cout<<phi<<endl;
}
return 0;
}
454545445
Code: Select all
if(i>3401){phi=(phi/n)*(n-1);break;}
Code: Select all
3403
0
Code: Select all
3280
Code: Select all
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int x,count,flag,factor[32000],div_count;
double n;
while(scanf("%d",&x)==1)
{
if(x==0)
break;
if(x==1)
printf("0\n");
else
{
n=x;
div_count=1;
memset(factor,0,sizeof(factor));
while(x>1)
{
for( count=2 ;count<=sqrt(x);count++)
{
flag=1;
if(x%count==0)
{
if(factor[count]==0)
n=n*(1-(float)1/count);
factor[count]=1;
x=x/count;
//p_count=1;
div_count=0;;
break;
}
flag=0;
}
if((flag==0)|| sqrt(x)<2)
break;
}
if(div_count==1)
n=x-1;
else if(div_count==0)
{
if(x<32000 && factor[x]==0)
n=n*(1-(float)1/x);
else if(x>32000)
n=n*(1-(float)1/x);
}
printf("%.0lf\n",n);
}
}
return 0;
}
makbet wrote:This program seems to work correctly for all inputs that I found here or made up.
But I constantly get WA
Thanks for any help
[c]#include <stdio.h>
#include <math.h>
int prime[100000];
int pl=0;
int sito(){
char p[100000];
int i,j;
p[1]=1;
p[2]=0;
for (i=2;i<=100000;++i)
if (!p)
for (j=2;j*i<100000;++j)
p[j*i]=1;
for (i=2;i<100000;++i)
if (!p)
prime[pl++]=i;
}
int main(){
long long i,n,q;
long long sn;
sito();
while (1){
scanf("%lld",&n);
if (!n) return 0;
if (n==1) { printf("0\n"); continue;}
q=n;
sn=rint(ceil(sqrt(n)));
/* printf("%d\n",sn);*/
for (i=0;prime<=sn ;++i)
if (n%prime==0){
/* printf("%d\n",prime);*/
q=q-q/prime;
while (n%prime==0) n/=prime;
}
if (n>1) q=q-q/n;
/* printf("%d\n",n);*/
printf("%lld\n",q);
}
return 0;
}[/c]