Я новичок в конкурентном программировании, и я сделал проблему с рангом Хакер. Заявление вопрос заключается в следующем:Хакер Ранг: Project Euler # 1
«Если мы все натуральные числа меньше 10, кратные 3 или 5, получим 3, 5, 6 и 9. Сумма этих мультипликаторов составляет 23.
Найти сумму всех кратные 3 или 5 ниже N.
формата входного Первой строка содержит T, которое обозначает количество тестовых случаев. за этим следует Т строки, каждые из которых содержит целое число, Н.
Формат вывода Для каждого тестового примера напечатайте целое число, которое обозначает сумму всех кратных 3 или 5 ниже N. "
Ограничения
1≤T≤10^5
1≤N≤10^9
Я написал следующий код, который успешно удовлетворяет 3 случая испытания и терпит неудачу в оставшиеся два.
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int func(int p,int n)
{
int j;
n=n-1;
j=n/p;
return (p*j*(j+1))/2;
}
int main()
{
unsigned long int n;
int t,j,count;
scanf("%d",&t);
if(t>=1 && t<=100000){
for(j=0;j<t;j++)
{
scanf("%lu",&n);
if(n>=1 && n<=1000000000)
{
count=func(3,n)+func(5,n)-func(15,n);
printf("%d\n",count);
}
}}
return 0;
}
Какая ошибка в моем коде. Почему он не принимается?
Речь идет не о конкурентоспособности ... Речь идет о поиске ответа на загадку. Это может быть не полезно, но решение проблемы дает много удовлетворения. Итак, если вы действительно поможете мне найти ошибку, это будет действительно полезно. –
Можете ли вы объяснить алгоритм функции func()? – jarmod
@jarmod: Это вариант суммы всех натуральных чисел до 'n', являющийся' n * (n + 1)/2', только с шагом 'p'. –