master
徐涛 3 years ago
parent 9952adbbd5
commit 7614a5c33a

@ -0,0 +1,5 @@
{
"files.associations": {
"iostream": "cpp"
}
}

@ -1,2 +1,59 @@
# CSP
## 高精度
1. python打表
2. 高精加和高精乘
## 筛法
1. 打表
2. 素数筛
1. 埃氏筛
```c++
bool book[100000001];
int prim[2000];
int prn = 0;
// 用埃氏筛法生成质数表
void prime(int b)
{
//初始化,默认全部都是质数
memset(book, true, sizeof(book));
book[1] = false; //1不是质数
int n = sqrt(b); //大于n的合数都被筛了但是prim里面的素数会变少看情况用
for (int i = 2; i <= n; i++)
{
if (book[i])
{
prim[prn++] = i;
//质数的倍数绝对不是质数把所有质数的倍数全部设为false
for (int j = i; j <= b ; j+=i)
book[j] = false; // i*j<=b
}
}
}
```
2. 线性筛
```c++
bool book[100000001];
int prim[2000];
int prn = 0;
// 用埃氏筛法生成质数表
void prime(int b)
{
//初始化,默认全部都是质数
memset(book, true, sizeof(book));
book[1] = false; //1不是质数
for (int i = 2; i <= n; i++)
{
if (book[i])
{
prim[prn++] = i;
}
for (int j = 0; j < prn && i * prim[j] < N; j++)
{
book[i * prim[j]] = false; // i*j<=b
if (i % prim[j] == 0)
break;
}
}
}
```

@ -0,0 +1,64 @@
#include <iostream>
#include <math.h>
#include <cstring>
using namespace std;
int x[601][601];
int F[601][601];
int line[601] = {0};
/*
indexindex
*/
int main()
{
int n, L, r, t;
cin >> n >> L >> r >> t;
for (int i = 0; i <= n; i++)
{
memset(line, 0, sizeof(line));
for (int j = 0; j <= n; j++)
{
if (i == 0 || j == 0)
F[i][j] = 0;
else
{
cin >> x[i][j];
line[j] = line[j - 1] + x[i][j];
F[i][j] = line[j] + F[i - 1][j];
}
}
}
// for (int i = 0; i <= n; i++)
// {
// for (int j = 0; j <= n; j++)
// {
// cout << F[i][j] << " ";
// }
// cout << endl;
// }
int count = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
int i_up = (i - r - 1 > 0) ? i - r - 1 : 0;
int i_down = (i + r <= n) ? i + r : n;
int j_left = (j - r - 1 > 0) ? j - r - 1 : 0;
int j_right = (j + r <= n) ? j + r : n;
double average = (F[i_down][j_right] + F[i_up][j_left] - F[i_down][j_left] - F[i_up][j_right]);
// cout << average << " ";
// cout << (i_down - i_up) * (j_right - j_left) << " ";
// if ((i_down - i_up) * (j_right - j_left) == 24)
// {
// cout << i << " " << j << " " << r << endl;
// }
average = average / (i_down - i_up) / (j_right - j_left);
if (average <= t)
count++;
}
// cout << endl;
}
cout << count;
return 0;
}

@ -0,0 +1,2 @@
# luogu_P1217
![](2021-09-23-15-35-38.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

@ -0,0 +1,98 @@
#include <bits/stdc++.h>
using namespace std;
int Prime(int x)
{
if (x == 1 || x == 0)
return 0;
if (x == 2 || x == 3)
return 1;
if (x % 2 == 0 || x % 3 == 0)
return 0;
for (int i = 2; i <= x / 2; i++)
{
if (x % i == 0)
return 0;
}
return 1;
}
int main()
{
freopen("D:/我的/大学/计算机类/1算法学习/CSP/筛法/P1217.txt", "w", stdout);
int d1, d2, d3, d4, d5, palindrome;
int k;
int a, b;
a = 5;
b = 100000000;
cout << "{";
//1
for (d1 = 1; d1 <= 9; d1 += 2)
{
palindrome = d1;
if (a > palindrome * 10)
break;
if (a <= palindrome && palindrome <= b && Prime(palindrome) == 1)
cout << palindrome << ",";
if (palindrome > b)
return 0;
}
//2
if (a <= 11 && 11 <= b)
cout << 11 << ",";
//3
for (d1 = 1; d1 <= 9; d1 += 2)
for (d2 = 0; d2 <= 9; d2++)
{
palindrome = 100 * d1 + 10 * d2 + d1;
if (a > palindrome * 10)
break;
if (a <= palindrome && palindrome <= b && Prime(palindrome) == 1)
cout << palindrome << ",";
if (palindrome > b)
return 0;
}
//5
for (d1 = 1; d1 <= 9; d1 += 2)
for (d2 = 0; d2 <= 9; d2++)
for (d3 = 0; d3 <= 9; d3++)
{
palindrome = 10000 * d1 + 1000 * d2 + 100 * d3 + 10 * d2 + d1;
if (a > palindrome * 10)
break;
if (a <= palindrome && palindrome <= b && Prime(palindrome) == 1)
cout << palindrome << ",";
if (palindrome > b)
return 0;
}
//7
for (d1 = 1; d1 <= 9; d1 += 2)
for (d2 = 0; d2 <= 9; d2++)
for (d3 = 0; d3 <= 9; d3++)
for (d4 = 0; d4 <= 9; d4++)
{
palindrome = 1000000 * d1 + 100000 * d2 + 10000 * d3 + 1000 * d4 + 100 * d3 + 10 * d2 + d1;
if (a > palindrome * 10)
break;
if (a <= palindrome && palindrome <= b && Prime(palindrome) == 1)
cout << palindrome << ",";
if (palindrome > b)
return 0;
}
//9
for (d1 = 1; d1 <= 9; d1 += 2)
for (d2 = 0; d2 <= 9; d2++)
for (d3 = 0; d3 <= 9; d3++)
for (d4 = 0; d4 <= 9; d4++)
for (d5 = 0; d5 <= 9; d5++)
{
palindrome = 100000000 * d1 + 10000000 * d2 + 1000000 * d3 + 100000 * d4 + 10000 * d5 + 1000 * d4 + 100 * d3 + 10 * d2 + d1;
if (a > palindrome * 10)
break;
if (a <= palindrome && palindrome <= b && Prime(palindrome) == 1)
cout << palindrome << ",";
if (palindrome > b)
return 0;
}
cout << "}";
return 0;
}

Binary file not shown.

@ -0,0 +1,53 @@
#include <bits/stdc++.h>
using namespace std;
void pplus(int *a, int *c)
{
int jw = 0;
for (int i = 1; i <= 1000; i++)
{
c[i] += a[i] + jw;
jw = c[i] / 10;
c[i] %= 10;
}
}
void pmultiply(int *a, int c)
{
int jw = 0;
for (int i = 0; i < 1000; i++)
{
a[i] = a[i] * c + jw;
jw = a[i] / 10;
a[i] %= 10;
}
}
//用高精度计算出 S = 1! + 2! + 3! + \cdots + n!S=1!+2!+3!+⋯+n!n \le 50n≤50
int main()
{
// python 打表
// string a[51] = {"0", "1", "3", "9", "33", "153", "873", "5913", "46233", "409113", "4037913", "43954713", "522956313", "6749977113", "93928268313", "1401602636313", "22324392524313", "378011820620313", "6780385526348313", "128425485935180313", "2561327494111820313", "53652269665821260313", "1177652997443428940313", "27029669736328405580313", "647478071469567844940313", "16158688114800553828940313", "419450149241406189412940313", "11308319599659758350180940313", "316196664211373618851684940313", "9157958657951075573395300940313", "274410818470142134209703780940313", "8497249472648064951935266660940313", "271628086406341595119153278820940313", "8954945705218228090637347680100940313", "304187744744822368938255957323620940313", "10637335711130967298604907294846820940313", "382630662501032184766604355445682020940313", "14146383753727377231082583937026584420940313", "537169001220328488991089808037100875620940313", "20935051082417771847631371547939998232420940313", "836850334330315506193242641144055892504420940313", "34289376947494122614363304694584807557656420940313", "1439295494700374021157505910939096377494040420940313", "61854558558074209658512637979453093884758552420940313", "2720126133346522977702138448994068984204397080420940313", "122342346998826717539665299944651784048588130840420940313", "5624964506810915667389970728744906677010239883800420940313", "264248206017979096310354325882356886646207872272920420940313", "12678163798554051767172643373255731925167694226950680420940313", "620960027832821612639424806694551108812720525606160920420940313", "31035053229546199656252032972759319953190362094566672920420940313"};
// int n;
// cin >> n;
// cout << a[n];
// 高精度模板
int n;
cin >> n;
int sum[51][1000];
memset(sum, 0, sizeof(int) * 1000);
sum[0][0] = 1;
for (int i = 1; i < n + 1; i++)
{
pmultiply(sum[i], i);
}
for (int i = 2; i < n + 1; i++)
{
pplus(sum[i - 1], sum[i]);
}
for (int i = 999; i >= 0; i--)
{
while (sum[n][i] == 0)
i--;
cout << sum[n][i];
}
return 0;
}

@ -0,0 +1,13 @@
f=open('高精度\point.txt','w')
sum=1
i=2
last=1
n=50
while i<=n:
last*=i
sum+=last
i+=1
f.write('"')
f.write(str(sum))
f.write('",')
f.close()

@ -0,0 +1 @@
"3","9","33","153","873","5913","46233","409113","4037913","43954713","522956313","6749977113","93928268313","1401602636313","22324392524313","378011820620313","6780385526348313","128425485935180313","2561327494111820313","53652269665821260313","1177652997443428940313","27029669736328405580313","647478071469567844940313","16158688114800553828940313","419450149241406189412940313","11308319599659758350180940313","316196664211373618851684940313","9157958657951075573395300940313","274410818470142134209703780940313","8497249472648064951935266660940313","271628086406341595119153278820940313","8954945705218228090637347680100940313","304187744744822368938255957323620940313","10637335711130967298604907294846820940313","382630662501032184766604355445682020940313","14146383753727377231082583937026584420940313","537169001220328488991089808037100875620940313","20935051082417771847631371547939998232420940313","836850334330315506193242641144055892504420940313","34289376947494122614363304694584807557656420940313","1439295494700374021157505910939096377494040420940313","61854558558074209658512637979453093884758552420940313","2720126133346522977702138448994068984204397080420940313","122342346998826717539665299944651784048588130840420940313","5624964506810915667389970728744906677010239883800420940313","264248206017979096310354325882356886646207872272920420940313","12678163798554051767172643373255731925167694226950680420940313","620960027832821612639424806694551108812720525606160920420940313","31035053229546199656252032972759319953190362094566672920420940313",
Loading…
Cancel
Save