All pastes #78030 Raw Edit

Mine

public text v1 · immutable
·published 2006-07-03 18:35 UTC
rendered paste body
#include<stdio.h>
#include<math.h>
#define     MAX    2000002
unsigned long long int ziValues[MAX];
unsigned long long int prime[MAX/2];
unsigned long long int primecnt;
long int getNoQns(unsigned long long int num)
{
    long int pos = 0;
    while(num>1)
    {
        num=((num+1)/2u);
        pos++;
    }
    return pos;
}
unsigned long long int getZiVal(unsigned long int num)
{
	unsigned long long int i, n, limit,  divn;
	double tmp;
	tmp = (double)num;
	limit = (int)sqrt(tmp)+1;
	for(i=0;i<primecnt && prime[i]<=limit && prime[i]<num;i++)
	{
		n=prime[i];
		if(num%n==0)
		{
			divn=n;
			while(divn!=num && (num/divn)%n==0)
			divn*=n;
			if(divn==num)
			{
				ziValues[num]=(num-num/n);
				return ziValues[num];
			}
			else
			{
				ziValues[num]=ziValues[divn]*ziValues[num/divn];
				return ziValues[num];
			}
		}
	}
	prime[primecnt] = num;
	primecnt++;
	ziValues[num] = (num-1);
	return ziValues[num];
}
int main()
{
    unsigned long long int iter, cnt, n;
    scanf("%llu",&n);
    cnt=0u;
    for(iter=2u;iter<=n;iter++)
    {
          cnt+=getZiVal(iter);
    }
    printf("%ld\n",getNoQns(cnt));
    return 0;
}