K
Khách

Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.

23 tháng 6 2021

Tham khảo:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<vector>
#define fr(a,b,c) for (a=b;a<=c;a++)
#define maxn 1000000
using namespace std;

int f[maxn+10];
long long sumf[maxn+10];
vector<int> a;

void etf()
{
   int i,j;
   fr(i,1,maxn) f[i]=i;
   fr(i,2,maxn)
   {
     if (f[i]==i)
       for (int j=i;j<=maxn;j+=i)
         f[j]=f[j]/i*(i-1);
     sumf[i]=sumf[i-1]+f[i];
   } 
}

long long gcdsum(int n)
{
   int i,d;
   long long re=0;
   a.clear();
   a.push_back(0);
   fr(i,1,n)
     if (n/i<i) break;
     else
     {
         a.push_back(i);
         if (n/i!=i) a.push_back(n/i);
     }
   sort(a.begin(),a.end());
   fr(i,1,int(a.size())-1) re+=sumf[n/a[i]]*(a[i]+a[i-1]+1)*(a[i]-a[i-1])/2;
   return re;
}

int main()
{
   etf();
   int n;
   while (1)
   {
      scanf("%d",&n);
      if (!n) break;
      printf("%lld\n",gcdsum(n));
   }
   return 0;
}

13 tháng 4 2021

Hmm, nói đến cờ chắc là dấu hiệu của semaphore, thử mò xem :v

Cái này mình chịu thôi, nhìn vào chả hiểu gì nữa là...haha

Thông cảm cho mìnhvui

31 tháng 5 2017

Bạn chạy tay CT ra nhé.

L=0 S=0, vì L< 5 => L+2=2 S=0+1=1

L=2 S=1, vì L< 5 => L+2=4 S=1+1=2

L=4 S=2, vì L< 5 => L+2=6 S=2+1=3

L=6, vì L=6>5 nên thoát vòng lặp ra và in S (S=3)

31 tháng 5 2017

Bạn sai rồi. Kết quả là 6. Mình muốn biết cách tính vòng lặp để bài nào cũng áp dụng đc thôi