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.
LM
1
Các câu hỏi dưới đây có thể giống với câu hỏi trên
NT
0
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
TP
0
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;
}