Pagini recente » Cod sursa (job #2628300) | Cod sursa (job #50039) | Cod sursa (job #2303477) | Cod sursa (job #2547937) | Cod sursa (job #477382)
Cod sursa(job #477382)
/*
Un fel de ciclu a lui eratostene.... nr prime se aduna.... cele cu 2 divizori se scad... cu 3 divizori primi se aduna
*/
#include<stdio.h>
#include<time.h>
#include<fstream>
using namespace std;
time_t start;
#define maxn 1021 * 103
long long ok[ maxn ], nr[ maxn ], val[ maxn];
void erato(int N)
{
for( int i = 2; i<= N; ++i)
{
if( ok[ i ] != 0) continue; // numar de genul 12 ( s-a ocupat 6 de el )
for( int j = 1; j * i <= N; ++j)
{
// limit = j * i * 2 suma e i * ( 1 + 2.... j *2 )
long long sum = i * (long long ) (j * 2) * ( j * 2 + 1) /2;
if( nr[ i ] % 2 == 1 || nr[ i ] == 0)
val[ j * i ] += sum;
else val[ j * i ] -= sum;
if( nr[ i ] == 0 && j != 1)
{
nr[ i * j ]++;
ok[ i * j ] = 0;
if( nr[ i * j ] == 1)
ok[ i * j ] = 1;
continue;
}
if( nr[ i ] == nr[ i * j ] )
ok[ i * j ] = 1;
}
}
}
int main()
{
int N;
//start =clock();
//freopen("sum.in","r",stdin);
//freopen("sum.out","w",stdout);
ifstream f("sum.in"); ofstream g("sum.out");
f>>N;
erato( 100000 );
return 0;
for( int i = 1; i <= N; ++i)
{
int a;
f>>a;
long long rez = (long long ) a * ( 2 * a+ 1) - val[ a ];;
g<<rez<<endl;
}
printf("%f", (float)( clock() - start )/ CLOCKS_PER_SEC);
return 0;
}