мне действительно нужна помощь в этой проблеме:СГМ из divizors чисел меньше или равно N
Учитывая положительное целое
N
мы определяемxsum(N)
как сумма СГМ чисел всех положительных целого числа делителей меньше или равнаN
.Например: xsum (6) = 1 + (1 + 2) + (1 + 3) + (1 + 2 + 4) + (1 + 5) + (1 + 2 + 3 + 6) = 33.
(xsum - сумма divizors 1 + сумма divizors от 2 + ... + сумма DIV 6)Учитывая положительное целое число
K
, вы просили, чтобы найти самые низкиеN
что удовлетворяет Состояние:xsum(N) >= K
К ненулевой натуральное число, которое имеет не более 14 цифр
ограничение по времени: 0,2 сек
Очевидно, что грубая сила будет выпадать для большинства случаев с превышением лимита времени. Я еще не нашел что-то получше, так что это код:
fscanf(fi,"%lld",&k);
i=2;
sum=1;
while(sum<k) {
sum=sum+i+1;
d=2;
while(d*d<=i) {
if(i%d==0 && d*d!=i)
sum=sum+d+i/d;
else
if(d*d==i)
sum+=d;
d++;
}
i++;
}
Любые лучшие идеи?
14 цифр означает 14 бит? Или десятичные цифры? Так или иначе. Этот вопрос не по теме. SO не является сайтом code-rview. Если ваш код работает, попробуйте [обзор кода] (http://codereview.stackexchange.com/). Но сначала прочитайте их FAQ (вы, конечно, не читали о SO)! – Olaf
14 десятичных цифр. Мой код работает, и я сказал, потому что я читал правила, которые вы должны показать свою работу, что вы пытаетесь сделать и т.д. – scummy