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.
Các câu hỏi dưới đây có thể giống với câu hỏi trên
ST
1
NN
13 tháng 4 2021
Hmm, nói đến cờ chắc là dấu hiệu của semaphore, thử mò xem :v
22 tháng 5 2017
Cái này mình chịu thôi, nhìn vào chả hiểu gì nữa là...
Thông cảm cho mình
NK
1
Q
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
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;
}