Cod sursa(job #1093530)

Utilizator vlady1997Vlad Bucur vlady1997 Data 28 ianuarie 2014 10:08:08
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.8 kb
        #include <cstdio>
        #include <cstring>
        #define Mod 9973
        using namespace std;
        int nr, s;
        bool ok[7000001], pus[7000001];
        void ciur (int n)
        {
            int i, j;
            for (i=1; ((i*i)<<1)+(i<<1)<=n/2; i++)
            {
                if (ok[i]==false)
                {
                    for (j=((i*i)<<1)+(i<<1); (j<<1)+1<=n/2; j+=(i<<1)+1)
                    {
                        ok[j]=true;
                    }
                }
            }
            for (i=1; (i<<1)+1<=n/2; i++)
            {
                if (ok[i]==false)
                {
                    for (j=(i<<1)+1; j<=n/2; j+=(i<<1)+1)
                    {
                        if (n%j==0 && pus[j]==false)
                        {
                            pus[j]=true;
                            nr++; s+=j; s%=Mod;
                        }
                    }
                }
            }
        }
        int main()
        {
            int t, n, i, j;
            freopen("ssnd.in","r",stdin);
            freopen("ssnd.out","w",stdout);
            scanf("%d",&t);
            for (i=1; i<=t; i++)
            {
                scanf("%d",&n); nr=2; s=(n+1)%Mod;
                if (n<700000) memset(pus,0,sizeof(n*sizeof(bool)));
                else memset(pus,0,sizeof(pus));
                for (j=2; j<n; j+=2)
                {
                    if (n%j==0)
                    {
                        pus[j]=true;
                        nr++; s+=j;
                        s%=Mod;
                    }
                }
                ciur(n);
                printf("%d %d\n",nr,s);
            }
            fclose(stdin);
            fclose(stdout);
            return 0;
        }