Sicily/1089. Farey Sequence

 1  #include  <iostream>
 2  #include  <memory.h>
 3  using  namespace std;
 4  long  long ans[ 1000002];
 5  int pr[ 1000002];
 6  int prime[ 79000];
 7  void getprime()
 8 {
 9         memset(pr, 0, sizeof(pr));
10          int k= 0;
11          for( int i= 2;i<= 1000000;i++)
12                  for( int j= 2;j*i<= 1000000;j++)
13                 {
14                         pr[i*j]= 1;
15                 }
16         prime[ 0]= 1;
17          for( int i= 2;i<= 1000000;i++)
18                  if(pr[i]== 0)
19                         prime[prime[ 0]++]=i;
20 }
21  int eular( int n)
22 {
23          int ret= 1;
24          for( int i= 1;i<=prime[ 0]&&prime[i]*prime[i]<=n;i++)
25         {
26                  if(n%prime[i]== 0)
27                 {
28                         n/=prime[i];
29                         ret*=prime[i]- 1;
30                          while(n%prime[i]== 0)
31                         {
32                                 ret*=prime[i];
33                                 n/=prime[i];
34                         }
35                 }
36         }
37          if(n> 1)
38                 ret*=n- 1;
39          return ret;
40 }
41  int main()
42 {
43         getprime();
44          int n;
45         ans[ 1]=ans[ 2]= 1;
46          for( int i= 3;i<= 1000000;i++)
47         {
48                 ans[i]=ans[i- 1]+eular(i);
49         }
50          while(cin>>n&&n!= 0)
51                 cout<<ans[n]<<endl;
52 }

转载于:https://www.cnblogs.com/congzc/archive/2011/07/01/2329942.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值