Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

为什么超时啊 有谁看看了

Posted by xiaoyufeng at 2009-03-06 20:40:32 on Problem 2478
#include<stdio.h>
int prime[100000];
int p[100000];
int t[100000];
__int64 a[1000010];
void PRIME(int M)
 {int i,j,k;
 prime[1]=2;
 prime[2]=3;
 k=2;
 for(i=5;i<=M;i+=2)
 {
  for(j=2;prime[j]*prime[j]<=i;j++)
  {
   if(i%prime[j]==0)goto loop;
 }
 k++;prime[k]=i;
 loop:;
 }
 prime[0]=k;
 }
 
 int Int(int n)
 {int i,s,k;

  k=n;
  for(i=1;i<=prime[0];i++)
  {
   s=0;
   while(n%prime[i]==0){s++;n/=prime[i];}
   if(s>0)
   {
          k=k/prime[i]*(prime[i]-1);
           }
   if(n==1)break;
 
   if(n/prime[i]<prime[i])
   {
   k=k/n*(n-1);break;}
  }
  return k;
 }
int main()
{
  int x,i,ans;
  int c,d;
  PRIME(1000);
  a[1]=0;
  for(i=2;i<=1000000;i++)
	  a[i]=a[i-1]+Int(i);
  while(scanf("%d",&x)!=EOF)
  {
    if(x==0)
    break;
    printf("%I64d\n",a[x]);
  }       
 return 0;   
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator